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

Module file_format.
  Axiom TableIndex : (Ty.path "move_binary_format::file_format::TableIndex") = (Ty.path "u16").
  
  (* StructTuple
    {
      name := "ModuleHandleIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::ModuleHandleIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::ModuleHandleIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::ModuleHandleIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::ModuleHandleIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::ModuleHandleIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::ModuleHandleIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::ModuleHandleIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::ModuleHandleIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::ModuleHandleIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::ModuleHandleIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [
                        M.read (| Value.String "ModuleHandleIndex(" |);
                        M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::ModuleHandleIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_ModuleHandleIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_ModuleHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandleIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::ModuleHandle" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::ModuleHandleIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_ModuleHandleIndex.
  
  (* StructTuple
    {
      name := "StructHandleIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::StructHandleIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructHandleIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructHandleIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::StructHandleIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructHandleIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::StructHandleIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructHandleIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::StructHandleIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::StructHandleIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::StructHandleIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [
                        M.read (| Value.String "StructHandleIndex(" |);
                        M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::StructHandleIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_StructHandleIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_StructHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandleIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::StructHandle" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::StructHandleIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_StructHandleIndex.
  
  (* StructTuple
    {
      name := "FunctionHandleIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::FunctionHandleIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionHandleIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionHandleIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FunctionHandleIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionHandleIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FunctionHandleIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionHandleIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FunctionHandleIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::FunctionHandleIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::FunctionHandleIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [
                        M.read (| Value.String "FunctionHandleIndex(" |);
                        M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::FunctionHandleIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionHandleIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_FunctionHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandleIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::FunctionHandle" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::FunctionHandleIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_FunctionHandleIndex.
  
  (* StructTuple
    {
      name := "FieldHandleIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::FieldHandleIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldHandleIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldHandleIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FieldHandleIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldHandleIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FieldHandleIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldHandleIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FieldHandleIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::FieldHandleIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::FieldHandleIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [ M.read (| Value.String "FieldHandleIndex(" |); M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::FieldHandleIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FieldHandleIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_FieldHandleIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandleIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::FieldHandle" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::FieldHandleIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_FieldHandleIndex.
  
  (* StructTuple
    {
      name := "StructDefInstantiationIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::StructDefInstantiationIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructDefInstantiationIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructDefInstantiationIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::StructDefInstantiationIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructDefInstantiationIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::StructDefInstantiationIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructDefInstantiationIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::StructDefInstantiationIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::StructDefInstantiationIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::StructDefInstantiationIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [
                        M.read (| Value.String "StructDefInstantiationIndex(" |);
                        M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::StructDefInstantiationIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_StructDefInstantiationIndex.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::StructDefInstantiationIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (|
            Value.StructTuple "move_binary_format::IndexKind::StructDefInstantiation" []
          |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::StructDefInstantiationIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_StructDefInstantiationIndex.
  
  (* StructTuple
    {
      name := "FunctionInstantiationIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::FunctionInstantiationIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionInstantiationIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionInstantiationIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FunctionInstantiationIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionInstantiationIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FunctionInstantiationIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionInstantiationIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FunctionInstantiationIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::FunctionInstantiationIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::FunctionInstantiationIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [
                        M.read (| Value.String "FunctionInstantiationIndex(" |);
                        M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::FunctionInstantiationIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_FunctionInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiationIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (|
            Value.StructTuple "move_binary_format::IndexKind::FunctionInstantiation" []
          |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::FunctionInstantiationIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_FunctionInstantiationIndex.
  
  (* StructTuple
    {
      name := "FieldInstantiationIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::FieldInstantiationIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldInstantiationIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldInstantiationIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FieldInstantiationIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldInstantiationIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FieldInstantiationIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldInstantiationIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FieldInstantiationIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::FieldInstantiationIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::FieldInstantiationIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [
                        M.read (| Value.String "FieldInstantiationIndex(" |);
                        M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::FieldInstantiationIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_FieldInstantiationIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiationIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::FieldInstantiation" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::FieldInstantiationIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_FieldInstantiationIndex.
  
  (* StructTuple
    {
      name := "IdentifierIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::IdentifierIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::IdentifierIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::IdentifierIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::IdentifierIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::IdentifierIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::IdentifierIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::IdentifierIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::IdentifierIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::IdentifierIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::IdentifierIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [ M.read (| Value.String "IdentifierIndex(" |); M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::IdentifierIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_IdentifierIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_IdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::IdentifierIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::Identifier" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::IdentifierIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_IdentifierIndex.
  
  (* StructTuple
    {
      name := "AddressIdentifierIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::AddressIdentifierIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::AddressIdentifierIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::AddressIdentifierIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::AddressIdentifierIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::AddressIdentifierIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::AddressIdentifierIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::AddressIdentifierIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::AddressIdentifierIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::AddressIdentifierIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::AddressIdentifierIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [
                        M.read (| Value.String "AddressIdentifierIndex(" |);
                        M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::AddressIdentifierIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_AddressIdentifierIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AddressIdentifierIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::AddressIdentifier" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::AddressIdentifierIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_AddressIdentifierIndex.
  
  (* StructTuple
    {
      name := "ConstantPoolIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::ConstantPoolIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::ConstantPoolIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::ConstantPoolIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::ConstantPoolIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::ConstantPoolIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::ConstantPoolIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::ConstantPoolIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::ConstantPoolIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::ConstantPoolIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::ConstantPoolIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [
                        M.read (| Value.String "ConstantPoolIndex(" |);
                        M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::ConstantPoolIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_ConstantPoolIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_ConstantPoolIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ConstantPoolIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::ConstantPool" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::ConstantPoolIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_ConstantPoolIndex.
  
  (* StructTuple
    {
      name := "SignatureIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::SignatureIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::SignatureIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::SignatureIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::SignatureIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::SignatureIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::SignatureIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::SignatureIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::SignatureIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple "move_binary_format::file_format::SignatureIndex" [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::SignatureIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [ M.read (| Value.String "SignatureIndex(" |); M.read (| Value.String ")" |) ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::SignatureIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_SignatureIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_SignatureIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::Signature" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::SignatureIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_SignatureIndex.
  
  (* StructTuple
    {
      name := "StructDefinitionIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::StructDefinitionIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructDefinitionIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructDefinitionIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::StructDefinitionIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructDefinitionIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::StructDefinitionIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructDefinitionIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::StructDefinitionIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::StructDefinitionIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::StructDefinitionIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [
                        M.read (| Value.String "StructDefinitionIndex(" |);
                        M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::StructDefinitionIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_StructDefinitionIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_StructDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinitionIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::StructDefinition" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::StructDefinitionIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_StructDefinitionIndex.
  
  (* StructTuple
    {
      name := "FunctionDefinitionIndex";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u16" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*         Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*         Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::FunctionDefinitionIndex"
            [
              M.call_closure (|
                M.get_trait_method (| "core::default::Default", Ty.path "u16", [], "default", [] |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*         Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*         Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionDefinitionIndex",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*         Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u16", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionDefinitionIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FunctionDefinitionIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*         PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionDefinitionIndex",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FunctionDefinitionIndex",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*         PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u16",
              [ Ty.path "u16" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionDefinitionIndex",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::FunctionDefinitionIndex",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*
                pub fn new(idx: TableIndex) -> Self {
                    Self(idx)
                }
    *)
    Definition new (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ idx ] =>
        ltac:(M.monadic
          (let idx := M.alloc (| idx |) in
          Value.StructTuple
            "move_binary_format::file_format::FunctionDefinitionIndex"
            [ M.read (| idx |) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_new : M.IsAssociatedFunction Self "new" new.
  End Impl_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_core_fmt_Display_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}", self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (| Value.Array [ M.read (| Value.String "" |) ] |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::FunctionDefinitionIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Display"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Display_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*
                fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                    write!(f, "{}({})", stringify!($name), self.0)
                }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
            [
              M.read (| f |);
              M.call_closure (|
                M.get_associated_function (| Ty.path "core::fmt::Arguments", "new_v1", [] |),
                [
                  M.alloc (|
                    Value.Array
                      [
                        M.read (| Value.String "FunctionDefinitionIndex(" |);
                        M.read (| Value.String ")" |)
                      ]
                  |);
                  M.alloc (|
                    Value.Array
                      [
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "core::fmt::rt::Argument",
                            "new_display",
                            [ Ty.path "u16" ]
                          |),
                          [
                            M.SubPointer.get_struct_tuple_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::FunctionDefinitionIndex",
                              0
                            |)
                          ]
                        |)
                      ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Module Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_FunctionDefinitionIndex.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinitionIndex".
    
    (*             const KIND: IndexKind = IndexKind::$kind; *)
    (* Ty.path "move_binary_format::IndexKind" *)
    Definition value_KIND : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (| Value.StructTuple "move_binary_format::IndexKind::FunctionDefinition" [] |))).
    
    (*
                fn into_index(self) -> usize {
                    self.0 as usize
                }
    *)
    Definition into_index (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.rust_cast
            (M.read (|
              M.SubPointer.get_struct_tuple_field (|
                self,
                "move_binary_format::file_format::FunctionDefinitionIndex",
                0
              |)
            |))))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "move_binary_format::internals::ModuleIndex"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("value_KIND", InstanceField.Constant value_KIND);
          ("into_index", InstanceField.Method into_index)
        ].
  End Impl_move_binary_format_internals_ModuleIndex_for_move_binary_format_file_format_FunctionDefinitionIndex.
  
  Axiom LocalIndex : (Ty.path "move_binary_format::file_format::LocalIndex") = (Ty.path "u8").
  
  Axiom MemberCount : (Ty.path "move_binary_format::file_format::MemberCount") = (Ty.path "u16").
  
  Axiom CodeOffset : (Ty.path "move_binary_format::file_format::CodeOffset") = (Ty.path "u16").
  
  Axiom IdentifierPool :
    (Ty.path "move_binary_format::file_format::IdentifierPool") =
      (Ty.apply
        (Ty.path "alloc::vec::Vec")
        []
        [ Ty.path "move_core_types::identifier::Identifier"; Ty.path "alloc::alloc::Global" ]).
  
  Axiom AddressIdentifierPool :
    (Ty.path "move_binary_format::file_format::AddressIdentifierPool") =
      (Ty.apply
        (Ty.path "alloc::vec::Vec")
        []
        [ Ty.path "move_core_types::account_address::AccountAddress"; Ty.path "alloc::alloc::Global"
        ]).
  
  Axiom ConstantPool :
    (Ty.path "move_binary_format::file_format::ConstantPool") =
      (Ty.apply
        (Ty.path "alloc::vec::Vec")
        []
        [ Ty.path "move_binary_format::file_format::Constant"; Ty.path "alloc::alloc::Global" ]).
  
  Axiom TypeSignaturePool :
    (Ty.path "move_binary_format::file_format::TypeSignaturePool") =
      (Ty.apply
        (Ty.path "alloc::vec::Vec")
        []
        [ Ty.path "move_binary_format::file_format::TypeSignature"; Ty.path "alloc::alloc::Global"
        ]).
  
  Axiom SignaturePool :
    (Ty.path "move_binary_format::file_format::SignaturePool") =
      (Ty.apply
        (Ty.path "alloc::vec::Vec")
        []
        [ Ty.path "move_binary_format::file_format::Signature"; Ty.path "alloc::alloc::Global" ]).
  
  (*
  pub fn self_module_name() -> &'static IdentStr {
      IdentStr::ref_cast("<SELF>")
  }
  *)
  Definition self_module_name (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
    match ε, τ, α with
    | [], [], [] =>
      ltac:(M.monadic
        (M.call_closure (|
          M.get_trait_method (|
            "ref_cast::RefCast",
            Ty.path "move_core_types::identifier::IdentStr",
            [],
            "ref_cast",
            []
          |),
          [ M.read (| Value.String "<SELF>" |) ]
        |)))
    | _, _, _ => M.impossible "wrong number of arguments"
    end.
  
  Axiom Function_self_module_name :
    M.IsFunction "move_binary_format::file_format::self_module_name" self_module_name.
  
  Definition value_NO_TYPE_ARGUMENTS : Value.t :=
    M.run
      ltac:(M.monadic
        (M.alloc (|
          Value.StructTuple
            "move_binary_format::file_format::SignatureIndex"
            [ Value.Integer IntegerKind.U16 0 ]
        |))).
  
  (* StructRecord
    {
      name := "ModuleHandle";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("address", Ty.path "move_binary_format::file_format::AddressIdentifierIndex");
          ("name", Ty.path "move_binary_format::file_format::IdentifierIndex")
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_ModuleHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandle".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::ModuleHandle"
            [
              ("address",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::AddressIdentifierIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::ModuleHandle",
                      "address"
                    |)
                  ]
                |));
              ("name",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::IdentifierIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::ModuleHandle",
                      "name"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_ModuleHandle.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_ModuleHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandle".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field2_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "ModuleHandle" |);
              M.read (| Value.String "address" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::ModuleHandle",
                "address"
              |);
              M.read (| Value.String "name" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::ModuleHandle",
                  "name"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_ModuleHandle.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_ModuleHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandle".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_ModuleHandle.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_ModuleHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandle".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::AddressIdentifierIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::ModuleHandle",
                      "address"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::hash::Hash",
                  Ty.path "move_binary_format::file_format::IdentifierIndex",
                  [],
                  "hash",
                  [ __H ]
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::ModuleHandle",
                    "name"
                  |);
                  M.read (| state |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_ModuleHandle.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_ModuleHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandle".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_ModuleHandle.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_ModuleHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandle".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            M.call_closure (|
              M.get_trait_method (|
                "core::cmp::PartialEq",
                Ty.path "move_binary_format::file_format::AddressIdentifierIndex",
                [ Ty.path "move_binary_format::file_format::AddressIdentifierIndex" ],
                "eq",
                []
              |),
              [
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::ModuleHandle",
                  "address"
                |);
                M.SubPointer.get_struct_record_field (|
                  M.read (| other |),
                  "move_binary_format::file_format::ModuleHandle",
                  "address"
                |)
              ]
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.path "move_binary_format::file_format::IdentifierIndex",
                  [ Ty.path "move_binary_format::file_format::IdentifierIndex" ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::ModuleHandle",
                    "name"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::ModuleHandle",
                    "name"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_ModuleHandle.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_ModuleHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandle".
    
    (* PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::PartialOrd",
                    Ty.path "move_binary_format::file_format::AddressIdentifierIndex",
                    [ Ty.path "move_binary_format::file_format::AddressIdentifierIndex" ],
                    "partial_cmp",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::ModuleHandle",
                      "address"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::ModuleHandle",
                      "address"
                    |)
                  ]
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "core::option::Option::Some",
                        0
                      |) in
                    let _ := M.is_struct_tuple (| γ0_0, "core::cmp::Ordering::Equal" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::PartialOrd",
                          Ty.path "move_binary_format::file_format::IdentifierIndex",
                          [ Ty.path "move_binary_format::file_format::IdentifierIndex" ],
                          "partial_cmp",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::ModuleHandle",
                            "name"
                          |);
                          M.SubPointer.get_struct_record_field (|
                            M.read (| other |),
                            "move_binary_format::file_format::ModuleHandle",
                            "name"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let cmp := M.copy (| γ |) in
                    cmp))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_ModuleHandle.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_ModuleHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::ModuleHandle".
    
    (* Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::Ord",
                    Ty.path "move_binary_format::file_format::AddressIdentifierIndex",
                    [],
                    "cmp",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::ModuleHandle",
                      "address"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::ModuleHandle",
                      "address"
                    |)
                  ]
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let _ := M.is_struct_tuple (| γ, "core::cmp::Ordering::Equal" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::Ord",
                          Ty.path "move_binary_format::file_format::IdentifierIndex",
                          [],
                          "cmp",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::ModuleHandle",
                            "name"
                          |);
                          M.SubPointer.get_struct_record_field (|
                            M.read (| other |),
                            "move_binary_format::file_format::ModuleHandle",
                            "name"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let cmp := M.copy (| γ |) in
                    cmp))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_ModuleHandle.
  
  (* StructRecord
    {
      name := "StructHandle";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("module", Ty.path "move_binary_format::file_format::ModuleHandleIndex");
          ("name", Ty.path "move_binary_format::file_format::IdentifierIndex");
          ("abilities", Ty.path "move_binary_format::file_format::AbilitySet");
          ("type_parameters",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::StructTypeParameter";
                Ty.path "alloc::alloc::Global"
              ])
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_StructHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandle".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::StructHandle"
            [
              ("module",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "module"
                    |)
                  ]
                |));
              ("name",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::IdentifierIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "name"
                    |)
                  ]
                |));
              ("abilities",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::AbilitySet",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "abilities"
                    |)
                  ]
                |));
              ("type_parameters",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructTypeParameter";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "type_parameters"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_StructHandle.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_StructHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandle".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field4_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "StructHandle" |);
              M.read (| Value.String "module" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructHandle",
                "module"
              |);
              M.read (| Value.String "name" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructHandle",
                "name"
              |);
              M.read (| Value.String "abilities" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructHandle",
                "abilities"
              |);
              M.read (| Value.String "type_parameters" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::StructHandle",
                  "type_parameters"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_StructHandle.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_StructHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandle".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (M.match_operator (|
                              Value.DeclaredButUndefined,
                              [
                                fun γ =>
                                  ltac:(M.monadic
                                    (M.match_operator (|
                                      Value.DeclaredButUndefined,
                                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                                    |)))
                              ]
                            |)))
                      ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_StructHandle.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_StructHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandle".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "module"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::IdentifierIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "name"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::AbilitySet",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "abilities"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::hash::Hash",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::StructTypeParameter";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [],
                  "hash",
                  [ __H ]
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::StructHandle",
                    "type_parameters"
                  |);
                  M.read (| state |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_StructHandle.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandle".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructHandle.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandle".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            LogicalOp.and (|
              LogicalOp.and (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::PartialEq",
                    Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                    [ Ty.path "move_binary_format::file_format::ModuleHandleIndex" ],
                    "eq",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "module"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::StructHandle",
                      "module"
                    |)
                  ]
                |),
                ltac:(M.monadic
                  (M.call_closure (|
                    M.get_trait_method (|
                      "core::cmp::PartialEq",
                      Ty.path "move_binary_format::file_format::IdentifierIndex",
                      [ Ty.path "move_binary_format::file_format::IdentifierIndex" ],
                      "eq",
                      []
                    |),
                    [
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::StructHandle",
                        "name"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| other |),
                        "move_binary_format::file_format::StructHandle",
                        "name"
                      |)
                    ]
                  |)))
              |),
              ltac:(M.monadic
                (M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::PartialEq",
                    Ty.path "move_binary_format::file_format::AbilitySet",
                    [ Ty.path "move_binary_format::file_format::AbilitySet" ],
                    "eq",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "abilities"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::StructHandle",
                      "abilities"
                    |)
                  ]
                |)))
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::StructTypeParameter";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructTypeParameter";
                        Ty.path "alloc::alloc::Global"
                      ]
                  ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::StructHandle",
                    "type_parameters"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::StructHandle",
                    "type_parameters"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructHandle.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_StructHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandle".
    
    (* PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::PartialOrd",
                    Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                    [ Ty.path "move_binary_format::file_format::ModuleHandleIndex" ],
                    "partial_cmp",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "module"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::StructHandle",
                      "module"
                    |)
                  ]
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "core::option::Option::Some",
                        0
                      |) in
                    let _ := M.is_struct_tuple (| γ0_0, "core::cmp::Ordering::Equal" |) in
                    M.match_operator (|
                      M.alloc (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "core::cmp::PartialOrd",
                            Ty.path "move_binary_format::file_format::IdentifierIndex",
                            [ Ty.path "move_binary_format::file_format::IdentifierIndex" ],
                            "partial_cmp",
                            []
                          |),
                          [
                            M.SubPointer.get_struct_record_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::StructHandle",
                              "name"
                            |);
                            M.SubPointer.get_struct_record_field (|
                              M.read (| other |),
                              "move_binary_format::file_format::StructHandle",
                              "name"
                            |)
                          ]
                        |)
                      |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "core::option::Option::Some",
                                0
                              |) in
                            let _ := M.is_struct_tuple (| γ0_0, "core::cmp::Ordering::Equal" |) in
                            M.match_operator (|
                              M.alloc (|
                                M.call_closure (|
                                  M.get_trait_method (|
                                    "core::cmp::PartialOrd",
                                    Ty.path "move_binary_format::file_format::AbilitySet",
                                    [ Ty.path "move_binary_format::file_format::AbilitySet" ],
                                    "partial_cmp",
                                    []
                                  |),
                                  [
                                    M.SubPointer.get_struct_record_field (|
                                      M.read (| self |),
                                      "move_binary_format::file_format::StructHandle",
                                      "abilities"
                                    |);
                                    M.SubPointer.get_struct_record_field (|
                                      M.read (| other |),
                                      "move_binary_format::file_format::StructHandle",
                                      "abilities"
                                    |)
                                  ]
                                |)
                              |),
                              [
                                fun γ =>
                                  ltac:(M.monadic
                                    (let γ0_0 :=
                                      M.SubPointer.get_struct_tuple_field (|
                                        γ,
                                        "core::option::Option::Some",
                                        0
                                      |) in
                                    let _ :=
                                      M.is_struct_tuple (| γ0_0, "core::cmp::Ordering::Equal" |) in
                                    M.alloc (|
                                      M.call_closure (|
                                        M.get_trait_method (|
                                          "core::cmp::PartialOrd",
                                          Ty.apply
                                            (Ty.path "alloc::vec::Vec")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructTypeParameter";
                                              Ty.path "alloc::alloc::Global"
                                            ],
                                          [
                                            Ty.apply
                                              (Ty.path "alloc::vec::Vec")
                                              []
                                              [
                                                Ty.path
                                                  "move_binary_format::file_format::StructTypeParameter";
                                                Ty.path "alloc::alloc::Global"
                                              ]
                                          ],
                                          "partial_cmp",
                                          []
                                        |),
                                        [
                                          M.SubPointer.get_struct_record_field (|
                                            M.read (| self |),
                                            "move_binary_format::file_format::StructHandle",
                                            "type_parameters"
                                          |);
                                          M.SubPointer.get_struct_record_field (|
                                            M.read (| other |),
                                            "move_binary_format::file_format::StructHandle",
                                            "type_parameters"
                                          |)
                                        ]
                                      |)
                                    |)));
                                fun γ =>
                                  ltac:(M.monadic
                                    (let cmp := M.copy (| γ |) in
                                    cmp))
                              ]
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let cmp := M.copy (| γ |) in
                            cmp))
                      ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let cmp := M.copy (| γ |) in
                    cmp))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_StructHandle.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_StructHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandle".
    
    (* Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::Ord",
                    Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                    [],
                    "cmp",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructHandle",
                      "module"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::StructHandle",
                      "module"
                    |)
                  ]
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let _ := M.is_struct_tuple (| γ, "core::cmp::Ordering::Equal" |) in
                    M.match_operator (|
                      M.alloc (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "core::cmp::Ord",
                            Ty.path "move_binary_format::file_format::IdentifierIndex",
                            [],
                            "cmp",
                            []
                          |),
                          [
                            M.SubPointer.get_struct_record_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::StructHandle",
                              "name"
                            |);
                            M.SubPointer.get_struct_record_field (|
                              M.read (| other |),
                              "move_binary_format::file_format::StructHandle",
                              "name"
                            |)
                          ]
                        |)
                      |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let _ := M.is_struct_tuple (| γ, "core::cmp::Ordering::Equal" |) in
                            M.match_operator (|
                              M.alloc (|
                                M.call_closure (|
                                  M.get_trait_method (|
                                    "core::cmp::Ord",
                                    Ty.path "move_binary_format::file_format::AbilitySet",
                                    [],
                                    "cmp",
                                    []
                                  |),
                                  [
                                    M.SubPointer.get_struct_record_field (|
                                      M.read (| self |),
                                      "move_binary_format::file_format::StructHandle",
                                      "abilities"
                                    |);
                                    M.SubPointer.get_struct_record_field (|
                                      M.read (| other |),
                                      "move_binary_format::file_format::StructHandle",
                                      "abilities"
                                    |)
                                  ]
                                |)
                              |),
                              [
                                fun γ =>
                                  ltac:(M.monadic
                                    (let _ :=
                                      M.is_struct_tuple (| γ, "core::cmp::Ordering::Equal" |) in
                                    M.alloc (|
                                      M.call_closure (|
                                        M.get_trait_method (|
                                          "core::cmp::Ord",
                                          Ty.apply
                                            (Ty.path "alloc::vec::Vec")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructTypeParameter";
                                              Ty.path "alloc::alloc::Global"
                                            ],
                                          [],
                                          "cmp",
                                          []
                                        |),
                                        [
                                          M.SubPointer.get_struct_record_field (|
                                            M.read (| self |),
                                            "move_binary_format::file_format::StructHandle",
                                            "type_parameters"
                                          |);
                                          M.SubPointer.get_struct_record_field (|
                                            M.read (| other |),
                                            "move_binary_format::file_format::StructHandle",
                                            "type_parameters"
                                          |)
                                        ]
                                      |)
                                    |)));
                                fun γ =>
                                  ltac:(M.monadic
                                    (let cmp := M.copy (| γ |) in
                                    cmp))
                              ]
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let cmp := M.copy (| γ |) in
                            cmp))
                      ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let cmp := M.copy (| γ |) in
                    cmp))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_StructHandle.
  
  Module Impl_move_binary_format_file_format_StructHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructHandle".
    
    (*
        pub fn type_param_constraints(&self) -> impl ExactSizeIterator<Item = AbilitySet> + '_ {
            self.type_parameters.iter().map(|param| param.constraints)
        }
    *)
    Definition type_param_constraints (ε : 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::iter::traits::iterator::Iterator",
              Ty.apply
                (Ty.path "core::slice::iter::Iter")
                []
                [ Ty.path "move_binary_format::file_format::StructTypeParameter" ],
              [],
              "map",
              [
                Ty.path "move_binary_format::file_format::AbilitySet";
                Ty.function
                  [
                    Ty.tuple
                      [
                        Ty.apply
                          (Ty.path "&")
                          []
                          [ Ty.path "move_binary_format::file_format::StructTypeParameter" ]
                      ]
                  ]
                  (Ty.path "move_binary_format::file_format::AbilitySet")
              ]
            |),
            [
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "slice")
                    []
                    [ Ty.path "move_binary_format::file_format::StructTypeParameter" ],
                  "iter",
                  []
                |),
                [
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::deref::Deref",
                      Ty.apply
                        (Ty.path "alloc::vec::Vec")
                        []
                        [
                          Ty.path "move_binary_format::file_format::StructTypeParameter";
                          Ty.path "alloc::alloc::Global"
                        ],
                      [],
                      "deref",
                      []
                    |),
                    [
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::StructHandle",
                        "type_parameters"
                      |)
                    ]
                  |)
                ]
              |);
              M.closure
                (fun γ =>
                  ltac:(M.monadic
                    match γ with
                    | [ α0 ] =>
                      ltac:(M.monadic
                        (M.match_operator (|
                          M.alloc (| α0 |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let param := M.copy (| γ |) in
                                M.read (|
                                  M.SubPointer.get_struct_record_field (|
                                    M.read (| param |),
                                    "move_binary_format::file_format::StructTypeParameter",
                                    "constraints"
                                  |)
                                |)))
                          ]
                        |)))
                    | _ => M.impossible "wrong number of arguments"
                    end))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_type_param_constraints :
      M.IsAssociatedFunction Self "type_param_constraints" type_param_constraints.
  End Impl_move_binary_format_file_format_StructHandle.
  
  (* StructRecord
    {
      name := "StructTypeParameter";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("constraints", Ty.path "move_binary_format::file_format::AbilitySet");
          ("is_phantom", Ty.path "bool")
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_StructTypeParameter.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_StructTypeParameter.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_StructTypeParameter.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_StructTypeParameter.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_StructTypeParameter.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field2_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "StructTypeParameter" |);
              M.read (| Value.String "constraints" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructTypeParameter",
                "constraints"
              |);
              M.read (| Value.String "is_phantom" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::StructTypeParameter",
                  "is_phantom"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_StructTypeParameter.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_StructTypeParameter.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_StructTypeParameter.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_StructTypeParameter.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::AbilitySet",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructTypeParameter",
                      "constraints"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (| "core::hash::Hash", Ty.path "bool", [], "hash", [ __H ] |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::StructTypeParameter",
                    "is_phantom"
                  |);
                  M.read (| state |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_StructTypeParameter.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructTypeParameter.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructTypeParameter.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructTypeParameter.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            M.call_closure (|
              M.get_trait_method (|
                "core::cmp::PartialEq",
                Ty.path "move_binary_format::file_format::AbilitySet",
                [ Ty.path "move_binary_format::file_format::AbilitySet" ],
                "eq",
                []
              |),
              [
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::StructTypeParameter",
                  "constraints"
                |);
                M.SubPointer.get_struct_record_field (|
                  M.read (| other |),
                  "move_binary_format::file_format::StructTypeParameter",
                  "constraints"
                |)
              ]
            |),
            ltac:(M.monadic
              (BinOp.eq (|
                M.read (|
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::StructTypeParameter",
                    "is_phantom"
                  |)
                |),
                M.read (|
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::StructTypeParameter",
                    "is_phantom"
                  |)
                |)
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructTypeParameter.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_StructTypeParameter.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
    
    (* PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::PartialOrd",
                    Ty.path "move_binary_format::file_format::AbilitySet",
                    [ Ty.path "move_binary_format::file_format::AbilitySet" ],
                    "partial_cmp",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructTypeParameter",
                      "constraints"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::StructTypeParameter",
                      "constraints"
                    |)
                  ]
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "core::option::Option::Some",
                        0
                      |) in
                    let _ := M.is_struct_tuple (| γ0_0, "core::cmp::Ordering::Equal" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::PartialOrd",
                          Ty.path "bool",
                          [ Ty.path "bool" ],
                          "partial_cmp",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::StructTypeParameter",
                            "is_phantom"
                          |);
                          M.SubPointer.get_struct_record_field (|
                            M.read (| other |),
                            "move_binary_format::file_format::StructTypeParameter",
                            "is_phantom"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let cmp := M.copy (| γ |) in
                    cmp))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_StructTypeParameter.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_StructTypeParameter.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
    
    (* Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::Ord",
                    Ty.path "move_binary_format::file_format::AbilitySet",
                    [],
                    "cmp",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructTypeParameter",
                      "constraints"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::StructTypeParameter",
                      "constraints"
                    |)
                  ]
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let _ := M.is_struct_tuple (| γ, "core::cmp::Ordering::Equal" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (| "core::cmp::Ord", Ty.path "bool", [], "cmp", [] |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::StructTypeParameter",
                            "is_phantom"
                          |);
                          M.SubPointer.get_struct_record_field (|
                            M.read (| other |),
                            "move_binary_format::file_format::StructTypeParameter",
                            "is_phantom"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let cmp := M.copy (| γ |) in
                    cmp))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_StructTypeParameter.
  
  Module underscore.
    Module Impl_serde_ser_Serialize_for_move_binary_format_file_format_StructTypeParameter.
      Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
      
      (* Serialize *)
      Definition serialize (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [ __S ], [ self; __serializer ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let __serializer := M.alloc (| __serializer |) in
            M.catch_return (|
              ltac:(M.monadic
                (M.read (|
                  let~ __serde_state :=
                    M.copy (|
                      M.match_operator (|
                        M.alloc (|
                          M.call_closure (|
                            M.get_trait_method (|
                              "serde::ser::Serializer",
                              __S,
                              [],
                              "serialize_struct",
                              []
                            |),
                            [
                              M.read (| __serializer |);
                              M.read (| Value.String "StructTypeParameter" |);
                              BinOp.Wrap.add (|
                                BinOp.Wrap.add (|
                                  M.rust_cast (Value.Bool false),
                                  Value.Integer IntegerKind.Usize 1
                                |),
                                Value.Integer IntegerKind.Usize 1
                              |)
                            ]
                          |)
                        |),
                        [
                          fun γ =>
                            ltac:(M.monadic
                              (let γ0_0 :=
                                M.SubPointer.get_struct_tuple_field (|
                                  γ,
                                  "core::result::Result::Ok",
                                  0
                                |) in
                              let __val := M.copy (| γ0_0 |) in
                              __val));
                          fun γ =>
                            ltac:(M.monadic
                              (let γ0_0 :=
                                M.SubPointer.get_struct_tuple_field (|
                                  γ,
                                  "core::result::Result::Err",
                                  0
                                |) in
                              let __err := M.copy (| γ0_0 |) in
                              M.alloc (|
                                M.never_to_any (|
                                  M.read (|
                                    M.return_ (|
                                      Value.StructTuple
                                        "core::result::Result::Err"
                                        [ M.read (| __err |) ]
                                    |)
                                  |)
                                |)
                              |)))
                        ]
                      |)
                    |) in
                  let~ _ :=
                    M.match_operator (|
                      M.alloc (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "serde::ser::SerializeStruct",
                            Ty.associated,
                            [],
                            "serialize_field",
                            [ Ty.path "move_binary_format::file_format::AbilitySet" ]
                          |),
                          [
                            __serde_state;
                            M.read (| Value.String "constraints" |);
                            M.SubPointer.get_struct_record_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::StructTypeParameter",
                              "constraints"
                            |)
                          ]
                        |)
                      |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "core::result::Result::Ok",
                                0
                              |) in
                            let __val := M.copy (| γ0_0 |) in
                            __val));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "core::result::Result::Err",
                                0
                              |) in
                            let __err := M.copy (| γ0_0 |) in
                            M.alloc (|
                              M.never_to_any (|
                                M.read (|
                                  M.return_ (|
                                    Value.StructTuple
                                      "core::result::Result::Err"
                                      [ M.read (| __err |) ]
                                  |)
                                |)
                              |)
                            |)))
                      ]
                    |) in
                  let~ _ :=
                    M.match_operator (|
                      M.alloc (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "serde::ser::SerializeStruct",
                            Ty.associated,
                            [],
                            "serialize_field",
                            [ Ty.path "bool" ]
                          |),
                          [
                            __serde_state;
                            M.read (| Value.String "is_phantom" |);
                            M.SubPointer.get_struct_record_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::StructTypeParameter",
                              "is_phantom"
                            |)
                          ]
                        |)
                      |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "core::result::Result::Ok",
                                0
                              |) in
                            let __val := M.copy (| γ0_0 |) in
                            __val));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "core::result::Result::Err",
                                0
                              |) in
                            let __err := M.copy (| γ0_0 |) in
                            M.alloc (|
                              M.never_to_any (|
                                M.read (|
                                  M.return_ (|
                                    Value.StructTuple
                                      "core::result::Result::Err"
                                      [ M.read (| __err |) ]
                                  |)
                                |)
                              |)
                            |)))
                      ]
                    |) in
                  M.alloc (|
                    M.call_closure (|
                      M.get_trait_method (|
                        "serde::ser::SerializeStruct",
                        Ty.associated,
                        [],
                        "end",
                        []
                      |),
                      [ M.read (| __serde_state |) ]
                    |)
                  |)
                |)))
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "serde::ser::Serialize"
          Self
          (* Trait polymorphic types *) []
          (* Instance *) [ ("serialize", InstanceField.Method serialize) ].
    End Impl_serde_ser_Serialize_for_move_binary_format_file_format_StructTypeParameter.
    Module Impl_serde_de_Deserialize_for_move_binary_format_file_format_StructTypeParameter.
      Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructTypeParameter".
      
      (* Deserialize *)
      Definition deserialize (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [ __D ], [ __deserializer ] =>
          ltac:(M.monadic
            (let __deserializer := M.alloc (| __deserializer |) in
            M.call_closure (|
              M.get_trait_method (|
                "serde::de::Deserializer",
                __D,
                [],
                "deserialize_struct",
                [ Ty.path "move_binary_format::file_format::_'1::deserialize::__Visitor" ]
              |),
              [
                M.read (| __deserializer |);
                M.read (| Value.String "StructTypeParameter" |);
                M.read (|
                  M.get_constant (| "move_binary_format::file_format::_'1::deserialize::FIELDS" |)
                |);
                Value.StructRecord
                  "move_binary_format::file_format::_'1::deserialize::__Visitor"
                  [
                    ("marker", Value.StructTuple "core::marker::PhantomData" []);
                    ("lifetime", Value.StructTuple "core::marker::PhantomData" [])
                  ]
              ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "serde::de::Deserialize"
          Self
          (* Trait polymorphic types *) []
          (* Instance *) [ ("deserialize", InstanceField.Method deserialize) ].
    End Impl_serde_de_Deserialize_for_move_binary_format_file_format_StructTypeParameter.
    Module Impl_serde_ser_Serialize_for_move_binary_format_file_format_Visibility.
      Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
      
      (* Serialize *)
      Definition serialize (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [ __S ], [ self; __serializer ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let __serializer := M.alloc (| __serializer |) in
            M.read (|
              M.match_operator (|
                M.read (| self |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let _ :=
                        M.is_struct_tuple (|
                          γ,
                          "move_binary_format::file_format::Visibility::Private"
                        |) in
                      M.alloc (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "serde::ser::Serializer",
                            __S,
                            [],
                            "serialize_unit_variant",
                            []
                          |),
                          [
                            M.read (| __serializer |);
                            M.read (| Value.String "Visibility" |);
                            Value.Integer IntegerKind.U32 0;
                            M.read (| Value.String "Private" |)
                          ]
                        |)
                      |)));
                  fun γ =>
                    ltac:(M.monadic
                      (let _ :=
                        M.is_struct_tuple (|
                          γ,
                          "move_binary_format::file_format::Visibility::Public"
                        |) in
                      M.alloc (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "serde::ser::Serializer",
                            __S,
                            [],
                            "serialize_unit_variant",
                            []
                          |),
                          [
                            M.read (| __serializer |);
                            M.read (| Value.String "Visibility" |);
                            Value.Integer IntegerKind.U32 1;
                            M.read (| Value.String "Public" |)
                          ]
                        |)
                      |)));
                  fun γ =>
                    ltac:(M.monadic
                      (let _ :=
                        M.is_struct_tuple (|
                          γ,
                          "move_binary_format::file_format::Visibility::Friend"
                        |) in
                      M.alloc (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "serde::ser::Serializer",
                            __S,
                            [],
                            "serialize_unit_variant",
                            []
                          |),
                          [
                            M.read (| __serializer |);
                            M.read (| Value.String "Visibility" |);
                            Value.Integer IntegerKind.U32 2;
                            M.read (| Value.String "Friend" |)
                          ]
                        |)
                      |)))
                ]
              |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "serde::ser::Serialize"
          Self
          (* Trait polymorphic types *) []
          (* Instance *) [ ("serialize", InstanceField.Method serialize) ].
    End Impl_serde_ser_Serialize_for_move_binary_format_file_format_Visibility.
    Module Impl_serde_de_Deserialize_for_move_binary_format_file_format_Visibility.
      Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
      
      (* Deserialize *)
      Definition deserialize (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [ __D ], [ __deserializer ] =>
          ltac:(M.monadic
            (let __deserializer := M.alloc (| __deserializer |) in
            M.call_closure (|
              M.get_trait_method (|
                "serde::de::Deserializer",
                __D,
                [],
                "deserialize_enum",
                [ Ty.path "move_binary_format::file_format::_'3::deserialize::__Visitor" ]
              |),
              [
                M.read (| __deserializer |);
                M.read (| Value.String "Visibility" |);
                M.read (|
                  M.get_constant (| "move_binary_format::file_format::_'3::deserialize::VARIANTS" |)
                |);
                Value.StructRecord
                  "move_binary_format::file_format::_'3::deserialize::__Visitor"
                  [
                    ("marker", Value.StructTuple "core::marker::PhantomData" []);
                    ("lifetime", Value.StructTuple "core::marker::PhantomData" [])
                  ]
              ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "serde::de::Deserialize"
          Self
          (* Trait polymorphic types *) []
          (* Instance *) [ ("deserialize", InstanceField.Method deserialize) ].
    End Impl_serde_de_Deserialize_for_move_binary_format_file_format_Visibility.
    Module Impl_serde_ser_Serialize_for_move_binary_format_file_format_AbilitySet.
      Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
      
      (* Serialize *)
      Definition serialize (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [ __S ], [ self; __serializer ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let __serializer := M.alloc (| __serializer |) in
            M.call_closure (|
              M.get_trait_method (|
                "serde::ser::Serializer",
                __S,
                [],
                "serialize_newtype_struct",
                [ Ty.path "u8" ]
              |),
              [
                M.read (| __serializer |);
                M.read (| Value.String "AbilitySet" |);
                M.SubPointer.get_struct_tuple_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::AbilitySet",
                  0
                |)
              ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "serde::ser::Serialize"
          Self
          (* Trait polymorphic types *) []
          (* Instance *) [ ("serialize", InstanceField.Method serialize) ].
    End Impl_serde_ser_Serialize_for_move_binary_format_file_format_AbilitySet.
    Module Impl_serde_de_Deserialize_for_move_binary_format_file_format_AbilitySet.
      Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
      
      (* Deserialize *)
      Definition deserialize (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [ __D ], [ __deserializer ] =>
          ltac:(M.monadic
            (let __deserializer := M.alloc (| __deserializer |) in
            M.call_closure (|
              M.get_trait_method (|
                "serde::de::Deserializer",
                __D,
                [],
                "deserialize_newtype_struct",
                [ Ty.path "move_binary_format::file_format::_'5::deserialize::__Visitor" ]
              |),
              [
                M.read (| __deserializer |);
                M.read (| Value.String "AbilitySet" |);
                Value.StructRecord
                  "move_binary_format::file_format::_'5::deserialize::__Visitor"
                  [
                    ("marker", Value.StructTuple "core::marker::PhantomData" []);
                    ("lifetime", Value.StructTuple "core::marker::PhantomData" [])
                  ]
              ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "serde::de::Deserialize"
          Self
          (* Trait polymorphic types *) []
          (* Instance *) [ ("deserialize", InstanceField.Method deserialize) ].
    End Impl_serde_de_Deserialize_for_move_binary_format_file_format_AbilitySet.
  End underscore.
  
  
  (* StructRecord
    {
      name := "FunctionHandle";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("module", Ty.path "move_binary_format::file_format::ModuleHandleIndex");
          ("name", Ty.path "move_binary_format::file_format::IdentifierIndex");
          ("parameters", Ty.path "move_binary_format::file_format::SignatureIndex");
          ("return_", Ty.path "move_binary_format::file_format::SignatureIndex");
          ("type_parameters",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::AbilitySet";
                Ty.path "alloc::alloc::Global"
              ])
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandle".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::FunctionHandle"
            [
              ("module",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionHandle",
                      "module"
                    |)
                  ]
                |));
              ("name",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::IdentifierIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionHandle",
                      "name"
                    |)
                  ]
                |));
              ("parameters",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::SignatureIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionHandle",
                      "parameters"
                    |)
                  ]
                |));
              ("return_",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::SignatureIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionHandle",
                      "return_"
                    |)
                  ]
                |));
              ("type_parameters",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::AbilitySet";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionHandle",
                      "type_parameters"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionHandle.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandle".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field5_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "FunctionHandle" |);
              M.read (| Value.String "module" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionHandle",
                "module"
              |);
              M.read (| Value.String "name" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionHandle",
                "name"
              |);
              M.read (| Value.String "parameters" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionHandle",
                "parameters"
              |);
              M.read (| Value.String "return_" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionHandle",
                "return_"
              |);
              M.read (| Value.String "type_parameters" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FunctionHandle",
                  "type_parameters"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionHandle.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandle".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (M.match_operator (|
                              Value.DeclaredButUndefined,
                              [
                                fun γ =>
                                  ltac:(M.monadic
                                    (M.match_operator (|
                                      Value.DeclaredButUndefined,
                                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                                    |)))
                              ]
                            |)))
                      ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionHandle.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandle".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionHandle",
                      "module"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::IdentifierIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionHandle",
                      "name"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::SignatureIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionHandle",
                      "parameters"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::SignatureIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionHandle",
                      "return_"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::hash::Hash",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::AbilitySet";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [],
                  "hash",
                  [ __H ]
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FunctionHandle",
                    "type_parameters"
                  |);
                  M.read (| state |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionHandle.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandle".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionHandle.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionHandle".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            LogicalOp.and (|
              LogicalOp.and (|
                LogicalOp.and (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::cmp::PartialEq",
                      Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                      [ Ty.path "move_binary_format::file_format::ModuleHandleIndex" ],
                      "eq",
                      []
                    |),
                    [
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::FunctionHandle",
                        "module"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| other |),
                        "move_binary_format::file_format::FunctionHandle",
                        "module"
                      |)
                    ]
                  |),
                  ltac:(M.monadic
                    (M.call_closure (|
                      M.get_trait_method (|
                        "core::cmp::PartialEq",
                        Ty.path "move_binary_format::file_format::IdentifierIndex",
                        [ Ty.path "move_binary_format::file_format::IdentifierIndex" ],
                        "eq",
                        []
                      |),
                      [
                        M.SubPointer.get_struct_record_field (|
                          M.read (| self |),
                          "move_binary_format::file_format::FunctionHandle",
                          "name"
                        |);
                        M.SubPointer.get_struct_record_field (|
                          M.read (| other |),
                          "move_binary_format::file_format::FunctionHandle",
                          "name"
                        |)
                      ]
                    |)))
                |),
                ltac:(M.monadic
                  (M.call_closure (|
                    M.get_trait_method (|
                      "core::cmp::PartialEq",
                      Ty.path "move_binary_format::file_format::SignatureIndex",
                      [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                      "eq",
                      []
                    |),
                    [
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::FunctionHandle",
                        "parameters"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| other |),
                        "move_binary_format::file_format::FunctionHandle",
                        "parameters"
                      |)
                    ]
                  |)))
              |),
              ltac:(M.monadic
                (M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::PartialEq",
                    Ty.path "move_binary_format::file_format::SignatureIndex",
                    [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                    "eq",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionHandle",
                      "return_"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::FunctionHandle",
                      "return_"
                    |)
                  ]
                |)))
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::AbilitySet";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::AbilitySet";
                        Ty.path "alloc::alloc::Global"
                      ]
                  ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FunctionHandle",
                    "type_parameters"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::FunctionHandle",
                    "type_parameters"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionHandle.
  
  (* StructRecord
    {
      name := "FieldHandle";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("owner", Ty.path "move_binary_format::file_format::StructDefinitionIndex");
          ("field", Ty.path "u16")
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FieldHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandle".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::FieldHandle"
            [
              ("owner",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FieldHandle",
                      "owner"
                    |)
                  ]
                |));
              ("field",
                M.call_closure (|
                  M.get_trait_method (| "core::clone::Clone", Ty.path "u16", [], "clone", [] |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FieldHandle",
                      "field"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FieldHandle.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FieldHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandle".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field2_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "FieldHandle" |);
              M.read (| Value.String "owner" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldHandle",
                "owner"
              |);
              M.read (| Value.String "field" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FieldHandle",
                  "field"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FieldHandle.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FieldHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandle".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FieldHandle.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_FieldHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandle".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FieldHandle",
                      "owner"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (| "core::hash::Hash", Ty.path "u16", [], "hash", [ __H ] |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FieldHandle",
                    "field"
                  |);
                  M.read (| state |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_FieldHandle.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FieldHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandle".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FieldHandle.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FieldHandle.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldHandle".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            M.call_closure (|
              M.get_trait_method (|
                "core::cmp::PartialEq",
                Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                [ Ty.path "move_binary_format::file_format::StructDefinitionIndex" ],
                "eq",
                []
              |),
              [
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FieldHandle",
                  "owner"
                |);
                M.SubPointer.get_struct_record_field (|
                  M.read (| other |),
                  "move_binary_format::file_format::FieldHandle",
                  "owner"
                |)
              ]
            |),
            ltac:(M.monadic
              (BinOp.eq (|
                M.read (|
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FieldHandle",
                    "field"
                  |)
                |),
                M.read (|
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::FieldHandle",
                    "field"
                  |)
                |)
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FieldHandle.
  
  (*
  Enum StructFieldInformation
  {
    const_params := [];
    ty_params := [];
    variants :=
      [
        {
          name := "Native";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Declared";
          item :=
            StructTuple
              [
                Ty.apply
                  (Ty.path "alloc::vec::Vec")
                  []
                  [
                    Ty.path "move_binary_format::file_format::FieldDefinition";
                    Ty.path "alloc::alloc::Global"
                  ]
              ];
          discriminant := None;
        }
      ];
  }
  *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_StructFieldInformation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructFieldInformation".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::StructFieldInformation::Native"
                      |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::StructFieldInformation::Native"
                        []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::StructFieldInformation::Declared",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::StructFieldInformation::Declared"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.apply
                                (Ty.path "alloc::vec::Vec")
                                []
                                [
                                  Ty.path "move_binary_format::file_format::FieldDefinition";
                                  Ty.path "alloc::alloc::Global"
                                ],
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_StructFieldInformation.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_StructFieldInformation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructFieldInformation".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::StructFieldInformation::Native"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_str",
                          []
                        |),
                        [ M.read (| f |); M.read (| Value.String "Native" |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::StructFieldInformation::Declared",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "debug_tuple_field1_finish",
                          []
                        |),
                        [ M.read (| f |); M.read (| Value.String "Declared" |); __self_0 ]
                      |)
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_StructFieldInformation.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_StructFieldInformation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructFieldInformation".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_StructFieldInformation.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructFieldInformation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructFieldInformation".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructFieldInformation.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructFieldInformation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructFieldInformation".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::StructFieldInformation" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::StructFieldInformation" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.alloc (|
              LogicalOp.and (|
                BinOp.eq (| M.read (| __self_discr |), M.read (| __arg1_discr |) |),
                ltac:(M.monadic
                  (M.read (|
                    M.match_operator (|
                      M.alloc (| Value.Tuple [ M.read (| self |); M.read (| other |) ] |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::StructFieldInformation::Declared",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::StructFieldInformation::Declared",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.apply
                                        (Ty.path "alloc::vec::Vec")
                                        []
                                        [
                                          Ty.path
                                            "move_binary_format::file_format::FieldDefinition";
                                          Ty.path "alloc::alloc::Global"
                                        ]
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.apply
                                          (Ty.path "alloc::vec::Vec")
                                          []
                                          [
                                            Ty.path
                                              "move_binary_format::file_format::FieldDefinition";
                                            Ty.path "alloc::alloc::Global"
                                          ]
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ => ltac:(M.monadic (M.alloc (| Value.Bool true |)))
                      ]
                    |)
                  |)))
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructFieldInformation.
  
  (* StructRecord
    {
      name := "StructDefInstantiation";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("def", Ty.path "move_binary_format::file_format::StructDefinitionIndex");
          ("type_parameters", Ty.path "move_binary_format::file_format::SignatureIndex")
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_StructDefInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefInstantiation".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::StructDefInstantiation"
            [
              ("def",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructDefInstantiation",
                      "def"
                    |)
                  ]
                |));
              ("type_parameters",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::SignatureIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructDefInstantiation",
                      "type_parameters"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_StructDefInstantiation.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_StructDefInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefInstantiation".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field2_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "StructDefInstantiation" |);
              M.read (| Value.String "def" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructDefInstantiation",
                "def"
              |);
              M.read (| Value.String "type_parameters" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::StructDefInstantiation",
                  "type_parameters"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_StructDefInstantiation.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_StructDefInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefInstantiation".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_StructDefInstantiation.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_StructDefInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefInstantiation".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructDefInstantiation",
                      "def"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::hash::Hash",
                  Ty.path "move_binary_format::file_format::SignatureIndex",
                  [],
                  "hash",
                  [ __H ]
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::StructDefInstantiation",
                    "type_parameters"
                  |);
                  M.read (| state |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_StructDefInstantiation.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructDefInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefInstantiation".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructDefInstantiation.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructDefInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefInstantiation".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            M.call_closure (|
              M.get_trait_method (|
                "core::cmp::PartialEq",
                Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                [ Ty.path "move_binary_format::file_format::StructDefinitionIndex" ],
                "eq",
                []
              |),
              [
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::StructDefInstantiation",
                  "def"
                |);
                M.SubPointer.get_struct_record_field (|
                  M.read (| other |),
                  "move_binary_format::file_format::StructDefInstantiation",
                  "def"
                |)
              ]
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.path "move_binary_format::file_format::SignatureIndex",
                  [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::StructDefInstantiation",
                    "type_parameters"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::StructDefInstantiation",
                    "type_parameters"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructDefInstantiation.
  
  (* StructRecord
    {
      name := "FunctionInstantiation";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("handle", Ty.path "move_binary_format::file_format::FunctionHandleIndex");
          ("type_parameters", Ty.path "move_binary_format::file_format::SignatureIndex")
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiation".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::FunctionInstantiation"
            [
              ("handle",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::FunctionHandleIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionInstantiation",
                      "handle"
                    |)
                  ]
                |));
              ("type_parameters",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::SignatureIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionInstantiation",
                      "type_parameters"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionInstantiation.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiation".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field2_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "FunctionInstantiation" |);
              M.read (| Value.String "handle" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionInstantiation",
                "handle"
              |);
              M.read (| Value.String "type_parameters" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FunctionInstantiation",
                  "type_parameters"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionInstantiation.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiation".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionInstantiation.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiation".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::FunctionHandleIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionInstantiation",
                      "handle"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::hash::Hash",
                  Ty.path "move_binary_format::file_format::SignatureIndex",
                  [],
                  "hash",
                  [ __H ]
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FunctionInstantiation",
                    "type_parameters"
                  |);
                  M.read (| state |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionInstantiation.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiation".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionInstantiation.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionInstantiation".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            M.call_closure (|
              M.get_trait_method (|
                "core::cmp::PartialEq",
                Ty.path "move_binary_format::file_format::FunctionHandleIndex",
                [ Ty.path "move_binary_format::file_format::FunctionHandleIndex" ],
                "eq",
                []
              |),
              [
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FunctionInstantiation",
                  "handle"
                |);
                M.SubPointer.get_struct_record_field (|
                  M.read (| other |),
                  "move_binary_format::file_format::FunctionInstantiation",
                  "handle"
                |)
              ]
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.path "move_binary_format::file_format::SignatureIndex",
                  [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FunctionInstantiation",
                    "type_parameters"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::FunctionInstantiation",
                    "type_parameters"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionInstantiation.
  
  (* StructRecord
    {
      name := "FieldInstantiation";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("handle", Ty.path "move_binary_format::file_format::FieldHandleIndex");
          ("type_parameters", Ty.path "move_binary_format::file_format::SignatureIndex")
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FieldInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiation".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::FieldInstantiation"
            [
              ("handle",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::FieldHandleIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FieldInstantiation",
                      "handle"
                    |)
                  ]
                |));
              ("type_parameters",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::SignatureIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FieldInstantiation",
                      "type_parameters"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FieldInstantiation.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FieldInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiation".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field2_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "FieldInstantiation" |);
              M.read (| Value.String "handle" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldInstantiation",
                "handle"
              |);
              M.read (| Value.String "type_parameters" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FieldInstantiation",
                  "type_parameters"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FieldInstantiation.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FieldInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiation".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FieldInstantiation.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_FieldInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiation".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::FieldHandleIndex",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FieldInstantiation",
                      "handle"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::hash::Hash",
                  Ty.path "move_binary_format::file_format::SignatureIndex",
                  [],
                  "hash",
                  [ __H ]
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FieldInstantiation",
                    "type_parameters"
                  |);
                  M.read (| state |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_FieldInstantiation.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FieldInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiation".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FieldInstantiation.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FieldInstantiation.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldInstantiation".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            M.call_closure (|
              M.get_trait_method (|
                "core::cmp::PartialEq",
                Ty.path "move_binary_format::file_format::FieldHandleIndex",
                [ Ty.path "move_binary_format::file_format::FieldHandleIndex" ],
                "eq",
                []
              |),
              [
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FieldInstantiation",
                  "handle"
                |);
                M.SubPointer.get_struct_record_field (|
                  M.read (| other |),
                  "move_binary_format::file_format::FieldInstantiation",
                  "handle"
                |)
              ]
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.path "move_binary_format::file_format::SignatureIndex",
                  [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FieldInstantiation",
                    "type_parameters"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::FieldInstantiation",
                    "type_parameters"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FieldInstantiation.
  
  (* StructRecord
    {
      name := "StructDefinition";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("struct_handle", Ty.path "move_binary_format::file_format::StructHandleIndex");
          ("field_information", Ty.path "move_binary_format::file_format::StructFieldInformation")
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_StructDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinition".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::StructDefinition"
            [
              ("struct_handle",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::StructHandleIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructDefinition",
                      "struct_handle"
                    |)
                  ]
                |));
              ("field_information",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::StructFieldInformation",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::StructDefinition",
                      "field_information"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_StructDefinition.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_StructDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinition".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field2_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "StructDefinition" |);
              M.read (| Value.String "struct_handle" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::StructDefinition",
                "struct_handle"
              |);
              M.read (| Value.String "field_information" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::StructDefinition",
                  "field_information"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_StructDefinition.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_StructDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinition".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_StructDefinition.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinition".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_StructDefinition.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinition".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            M.call_closure (|
              M.get_trait_method (|
                "core::cmp::PartialEq",
                Ty.path "move_binary_format::file_format::StructHandleIndex",
                [ Ty.path "move_binary_format::file_format::StructHandleIndex" ],
                "eq",
                []
              |),
              [
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::StructDefinition",
                  "struct_handle"
                |);
                M.SubPointer.get_struct_record_field (|
                  M.read (| other |),
                  "move_binary_format::file_format::StructDefinition",
                  "struct_handle"
                |)
              ]
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.path "move_binary_format::file_format::StructFieldInformation",
                  [ Ty.path "move_binary_format::file_format::StructFieldInformation" ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::StructDefinition",
                    "field_information"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::StructDefinition",
                    "field_information"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_StructDefinition.
  
  Module Impl_move_binary_format_file_format_StructDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::StructDefinition".
    
    (*
        pub fn declared_field_count(&self) -> PartialVMResult<MemberCount> {
            match &self.field_information {
                // TODO we might want a more informative error here
                StructFieldInformation::Native => Err(PartialVMError::new(StatusCode::LINKER_ERROR)
                    .with_message("Looking for field in native structure".to_string())),
                StructFieldInformation::Declared(fields) => Ok(fields.len() as u16),
            }
        }
    *)
    Definition declared_field_count (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::StructDefinition",
                  "field_information"
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::StructFieldInformation::Native"
                      |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::result::Result::Err"
                        [
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "move_binary_format::errors::PartialVMError",
                              "with_message",
                              []
                            |),
                            [
                              M.call_closure (|
                                M.get_associated_function (|
                                  Ty.path "move_binary_format::errors::PartialVMError",
                                  "new",
                                  []
                                |),
                                [
                                  Value.StructTuple
                                    "move_core_types::vm_status::StatusCode::LINKER_ERROR"
                                    []
                                ]
                              |);
                              M.call_closure (|
                                M.get_trait_method (|
                                  "alloc::string::ToString",
                                  Ty.path "str",
                                  [],
                                  "to_string",
                                  []
                                |),
                                [ M.read (| Value.String "Looking for field in native structure" |)
                                ]
                              |)
                            ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::StructFieldInformation::Declared",
                        0
                      |) in
                    let fields := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::result::Result::Ok"
                        [
                          M.rust_cast
                            (M.call_closure (|
                              M.get_associated_function (|
                                Ty.apply
                                  (Ty.path "alloc::vec::Vec")
                                  []
                                  [
                                    Ty.path "move_binary_format::file_format::FieldDefinition";
                                    Ty.path "alloc::alloc::Global"
                                  ],
                                "len",
                                []
                              |),
                              [ M.read (| fields |) ]
                            |))
                        ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_declared_field_count :
      M.IsAssociatedFunction Self "declared_field_count" declared_field_count.
    
    (*
        pub fn field(&self, offset: usize) -> Option<&FieldDefinition> {
            match &self.field_information {
                StructFieldInformation::Native => None,
                StructFieldInformation::Declared(fields) => fields.get(offset),
            }
        }
    *)
    Definition field (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; offset ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let offset := M.alloc (| offset |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::StructDefinition",
                  "field_information"
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::StructFieldInformation::Native"
                      |) in
                    M.alloc (| Value.StructTuple "core::option::Option::None" [] |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::StructFieldInformation::Declared",
                        0
                      |) in
                    let fields := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "slice")
                            []
                            [ Ty.path "move_binary_format::file_format::FieldDefinition" ],
                          "get",
                          [ Ty.path "usize" ]
                        |),
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::ops::deref::Deref",
                              Ty.apply
                                (Ty.path "alloc::vec::Vec")
                                []
                                [
                                  Ty.path "move_binary_format::file_format::FieldDefinition";
                                  Ty.path "alloc::alloc::Global"
                                ],
                              [],
                              "deref",
                              []
                            |),
                            [ M.read (| fields |) ]
                          |);
                          M.read (| offset |)
                        ]
                      |)
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_field : M.IsAssociatedFunction Self "field" field.
    
    (*
        pub fn fields(&self) -> Option<&[FieldDefinition]> {
            match &self.field_information {
                StructFieldInformation::Native => None,
                StructFieldInformation::Declared(fields) => Some(fields),
            }
        }
    *)
    Definition fields (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::StructDefinition",
                  "field_information"
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::StructFieldInformation::Native"
                      |) in
                    M.alloc (| Value.StructTuple "core::option::Option::None" [] |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::StructFieldInformation::Declared",
                        0
                      |) in
                    let fields := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::option::Option::Some"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::ops::deref::Deref",
                              Ty.apply
                                (Ty.path "alloc::vec::Vec")
                                []
                                [
                                  Ty.path "move_binary_format::file_format::FieldDefinition";
                                  Ty.path "alloc::alloc::Global"
                                ],
                              [],
                              "deref",
                              []
                            |),
                            [ M.read (| fields |) ]
                          |)
                        ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_fields : M.IsAssociatedFunction Self "fields" fields.
  End Impl_move_binary_format_file_format_StructDefinition.
  
  (* StructRecord
    {
      name := "FieldDefinition";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("name", Ty.path "move_binary_format::file_format::IdentifierIndex");
          ("signature", Ty.path "move_binary_format::file_format::TypeSignature")
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FieldDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldDefinition".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::FieldDefinition"
            [
              ("name",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::IdentifierIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FieldDefinition",
                      "name"
                    |)
                  ]
                |));
              ("signature",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::TypeSignature",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FieldDefinition",
                      "signature"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FieldDefinition.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FieldDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldDefinition".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field2_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "FieldDefinition" |);
              M.read (| Value.String "name" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FieldDefinition",
                "name"
              |);
              M.read (| Value.String "signature" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FieldDefinition",
                  "signature"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FieldDefinition.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FieldDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldDefinition".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FieldDefinition.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FieldDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldDefinition".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FieldDefinition.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FieldDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FieldDefinition".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            M.call_closure (|
              M.get_trait_method (|
                "core::cmp::PartialEq",
                Ty.path "move_binary_format::file_format::IdentifierIndex",
                [ Ty.path "move_binary_format::file_format::IdentifierIndex" ],
                "eq",
                []
              |),
              [
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FieldDefinition",
                  "name"
                |);
                M.SubPointer.get_struct_record_field (|
                  M.read (| other |),
                  "move_binary_format::file_format::FieldDefinition",
                  "name"
                |)
              ]
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.path "move_binary_format::file_format::TypeSignature",
                  [ Ty.path "move_binary_format::file_format::TypeSignature" ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FieldDefinition",
                    "signature"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::FieldDefinition",
                    "signature"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FieldDefinition.
  
  (*
  Enum Visibility
  {
    const_params := [];
    ty_params := [];
    variants :=
      [
        {
          name := "Private";
          item := StructTuple [];
          discriminant := Some 0;
        };
        {
          name := "Public";
          item := StructTuple [];
          discriminant := Some 1;
        };
        {
          name := "Friend";
          item := StructTuple [];
          discriminant := Some 3;
        }
      ];
  }
  *)
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    (* Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple "move_binary_format::file_format::Visibility::Private" []))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_Visibility.
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (| M.read (| self |) |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_Visibility.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_Visibility.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_str", [] |),
            [
              M.read (| f |);
              M.read (|
                M.match_operator (|
                  self,
                  [
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let _ :=
                          M.is_struct_tuple (|
                            γ,
                            "move_binary_format::file_format::Visibility::Private"
                          |) in
                        M.alloc (| M.read (| Value.String "Private" |) |)));
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let _ :=
                          M.is_struct_tuple (|
                            γ,
                            "move_binary_format::file_format::Visibility::Public"
                          |) in
                        M.alloc (| M.read (| Value.String "Public" |) |)));
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let _ :=
                          M.is_struct_tuple (|
                            γ,
                            "move_binary_format::file_format::Visibility::Friend"
                          |) in
                        M.alloc (| M.read (| Value.String "Friend" |) |)))
                  ]
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_Visibility.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.Tuple []))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_Visibility.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_Visibility.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Visibility" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Visibility" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.alloc (| BinOp.eq (| M.read (| __self_discr |), M.read (| __arg1_discr |) |) |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_Visibility.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    (* PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Visibility" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Visibility" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialOrd",
                  Ty.path "u8",
                  [ Ty.path "u8" ],
                  "partial_cmp",
                  []
                |),
                [ __self_discr; __arg1_discr ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_Visibility.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    (* Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Visibility" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Visibility" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (| "core::cmp::Ord", Ty.path "u8", [], "cmp", [] |),
                [ __self_discr; __arg1_discr ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_Visibility.
  
  
  
  Module Impl_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    (*     pub const DEPRECATED_SCRIPT: u8 = 0x2; *)
    (* Ty.path "u8" *)
    Definition value_DEPRECATED_SCRIPT : Value.t :=
      M.run ltac:(M.monadic (M.alloc (| Value.Integer IntegerKind.U8 2 |))).
    
    Axiom AssociatedConstant_value_DEPRECATED_SCRIPT :
      M.IsAssociatedConstant Self "value_DEPRECATED_SCRIPT" value_DEPRECATED_SCRIPT.
  End Impl_move_binary_format_file_format_Visibility.
  
  Module Impl_core_convert_TryFrom_u8_for_move_binary_format_file_format_Visibility.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Visibility".
    
    (*     type Error = (); *)
    Definition _Error : Ty.t := Ty.tuple [].
    
    (*
        fn try_from(v: u8) -> Result<Self, Self::Error> {
            match v {
                x if x == Visibility::Private as u8 => Ok(Visibility::Private),
                x if x == Visibility::Public as u8 => Ok(Visibility::Public),
                x if x == Visibility::Friend as u8 => Ok(Visibility::Friend),
                _ => Err(()),
            }
        }
    *)
    Definition try_from (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ v ] =>
        ltac:(M.monadic
          (let v := M.alloc (| v |) in
          M.read (|
            M.match_operator (|
              v,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let x := M.copy (| γ |) in
                    let γ :=
                      M.alloc (|
                        BinOp.eq (|
                          M.read (| x |),
                          M.rust_cast
                            (BinOp.Wrap.add (|
                              M.get_constant (|
                                "move_binary_format::file_format::Visibility::Private_discriminant"
                              |),
                              Value.Integer IntegerKind.U8 0
                            |))
                        |)
                      |) in
                    let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::result::Result::Ok"
                        [
                          Value.StructTuple
                            "move_binary_format::file_format::Visibility::Private"
                            []
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let x := M.copy (| γ |) in
                    let γ :=
                      M.alloc (|
                        BinOp.eq (|
                          M.read (| x |),
                          M.rust_cast
                            (BinOp.Wrap.add (|
                              M.get_constant (|
                                "move_binary_format::file_format::Visibility::Public_discriminant"
                              |),
                              Value.Integer IntegerKind.U8 0
                            |))
                        |)
                      |) in
                    let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::result::Result::Ok"
                        [ Value.StructTuple "move_binary_format::file_format::Visibility::Public" []
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let x := M.copy (| γ |) in
                    let γ :=
                      M.alloc (|
                        BinOp.eq (|
                          M.read (| x |),
                          M.rust_cast
                            (BinOp.Wrap.add (|
                              M.get_constant (|
                                "move_binary_format::file_format::Visibility::Friend_discriminant"
                              |),
                              Value.Integer IntegerKind.U8 0
                            |))
                        |)
                      |) in
                    let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::result::Result::Ok"
                        [ Value.StructTuple "move_binary_format::file_format::Visibility::Friend" []
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (M.alloc (|
                      Value.StructTuple "core::result::Result::Err" [ Value.Tuple [] ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::convert::TryFrom"
        Self
        (* Trait polymorphic types *) [ (* T *) Ty.path "u8" ]
        (* Instance *)
        [ ("Error", InstanceField.Ty _Error); ("try_from", InstanceField.Method try_from) ].
  End Impl_core_convert_TryFrom_u8_for_move_binary_format_file_format_Visibility.
  
  (* StructRecord
    {
      name := "FunctionDefinition";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("function", Ty.path "move_binary_format::file_format::FunctionHandleIndex");
          ("visibility", Ty.path "move_binary_format::file_format::Visibility");
          ("is_entry", Ty.path "bool");
          ("acquires_global_resources",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::StructDefinitionIndex";
                Ty.path "alloc::alloc::Global"
              ]);
          ("code",
            Ty.apply
              (Ty.path "core::option::Option")
              []
              [ Ty.path "move_binary_format::file_format::CodeUnit" ])
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinition".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::FunctionDefinition"
            [
              ("function",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::FunctionHandleIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionDefinition",
                      "function"
                    |)
                  ]
                |));
              ("visibility",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::Visibility",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionDefinition",
                      "visibility"
                    |)
                  ]
                |));
              ("is_entry",
                M.call_closure (|
                  M.get_trait_method (| "core::clone::Clone", Ty.path "bool", [], "clone", [] |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionDefinition",
                      "is_entry"
                    |)
                  ]
                |));
              ("acquires_global_resources",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructDefinitionIndex";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionDefinition",
                      "acquires_global_resources"
                    |)
                  ]
                |));
              ("code",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "core::option::Option")
                      []
                      [ Ty.path "move_binary_format::file_format::CodeUnit" ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionDefinition",
                      "code"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionDefinition.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinition".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field5_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "FunctionDefinition" |);
              M.read (| Value.String "function" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionDefinition",
                "function"
              |);
              M.read (| Value.String "visibility" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionDefinition",
                "visibility"
              |);
              M.read (| Value.String "is_entry" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionDefinition",
                "is_entry"
              |);
              M.read (| Value.String "acquires_global_resources" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionDefinition",
                "acquires_global_resources"
              |);
              M.read (| Value.String "code" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FunctionDefinition",
                  "code"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionDefinition.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_FunctionDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinition".
    
    (* Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructRecord
            "move_binary_format::file_format::FunctionDefinition"
            [
              ("function",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.path "move_binary_format::file_format::FunctionHandleIndex",
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("visibility",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.path "move_binary_format::file_format::Visibility",
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("is_entry",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.path "bool",
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("acquires_global_resources",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructDefinitionIndex";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("code",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "core::option::Option")
                      []
                      [ Ty.path "move_binary_format::file_format::CodeUnit" ],
                    [],
                    "default",
                    []
                  |),
                  []
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_FunctionDefinition.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinition".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (M.match_operator (|
                              Value.DeclaredButUndefined,
                              [
                                fun γ =>
                                  ltac:(M.monadic
                                    (M.match_operator (|
                                      Value.DeclaredButUndefined,
                                      [
                                        fun γ =>
                                          ltac:(M.monadic
                                            (M.match_operator (|
                                              Value.DeclaredButUndefined,
                                              [
                                                fun γ =>
                                                  ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                                              ]
                                            |)))
                                      ]
                                    |)))
                              ]
                            |)))
                      ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionDefinition.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinition".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionDefinition.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinition".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            LogicalOp.and (|
              LogicalOp.and (|
                LogicalOp.and (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::cmp::PartialEq",
                      Ty.path "move_binary_format::file_format::FunctionHandleIndex",
                      [ Ty.path "move_binary_format::file_format::FunctionHandleIndex" ],
                      "eq",
                      []
                    |),
                    [
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::FunctionDefinition",
                        "function"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| other |),
                        "move_binary_format::file_format::FunctionDefinition",
                        "function"
                      |)
                    ]
                  |),
                  ltac:(M.monadic
                    (M.call_closure (|
                      M.get_trait_method (|
                        "core::cmp::PartialEq",
                        Ty.path "move_binary_format::file_format::Visibility",
                        [ Ty.path "move_binary_format::file_format::Visibility" ],
                        "eq",
                        []
                      |),
                      [
                        M.SubPointer.get_struct_record_field (|
                          M.read (| self |),
                          "move_binary_format::file_format::FunctionDefinition",
                          "visibility"
                        |);
                        M.SubPointer.get_struct_record_field (|
                          M.read (| other |),
                          "move_binary_format::file_format::FunctionDefinition",
                          "visibility"
                        |)
                      ]
                    |)))
                |),
                ltac:(M.monadic
                  (BinOp.eq (|
                    M.read (|
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::FunctionDefinition",
                        "is_entry"
                      |)
                    |),
                    M.read (|
                      M.SubPointer.get_struct_record_field (|
                        M.read (| other |),
                        "move_binary_format::file_format::FunctionDefinition",
                        "is_entry"
                      |)
                    |)
                  |)))
              |),
              ltac:(M.monadic
                (M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::PartialEq",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructDefinitionIndex";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [
                      Ty.apply
                        (Ty.path "alloc::vec::Vec")
                        []
                        [
                          Ty.path "move_binary_format::file_format::StructDefinitionIndex";
                          Ty.path "alloc::alloc::Global"
                        ]
                    ],
                    "eq",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionDefinition",
                      "acquires_global_resources"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::FunctionDefinition",
                      "acquires_global_resources"
                    |)
                  ]
                |)))
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.apply
                    (Ty.path "core::option::Option")
                    []
                    [ Ty.path "move_binary_format::file_format::CodeUnit" ],
                  [
                    Ty.apply
                      (Ty.path "core::option::Option")
                      []
                      [ Ty.path "move_binary_format::file_format::CodeUnit" ]
                  ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FunctionDefinition",
                    "code"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::FunctionDefinition",
                    "code"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionDefinition.
  
  Module Impl_move_binary_format_file_format_FunctionDefinition.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionDefinition".
    
    (*
        pub fn is_native(&self) -> bool {
            self.code.is_none()
        }
    *)
    Definition is_native (ε : 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_associated_function (|
              Ty.apply
                (Ty.path "core::option::Option")
                []
                [ Ty.path "move_binary_format::file_format::CodeUnit" ],
              "is_none",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionDefinition",
                "code"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_native : M.IsAssociatedFunction Self "is_native" is_native.
    
    (*     pub const DEPRECATED_PUBLIC_BIT: u8 = 0b01; *)
    (* Ty.path "u8" *)
    Definition value_DEPRECATED_PUBLIC_BIT : Value.t :=
      M.run ltac:(M.monadic (M.alloc (| Value.Integer IntegerKind.U8 1 |))).
    
    Axiom AssociatedConstant_value_DEPRECATED_PUBLIC_BIT :
      M.IsAssociatedConstant Self "value_DEPRECATED_PUBLIC_BIT" value_DEPRECATED_PUBLIC_BIT.
    
    (*     pub const NATIVE: u8 = 0b10; *)
    (* Ty.path "u8" *)
    Definition value_NATIVE : Value.t :=
      M.run ltac:(M.monadic (M.alloc (| Value.Integer IntegerKind.U8 2 |))).
    
    Axiom AssociatedConstant_value_NATIVE : M.IsAssociatedConstant Self "value_NATIVE" value_NATIVE.
    
    (*     pub const ENTRY: u8 = 0b100; *)
    (* Ty.path "u8" *)
    Definition value_ENTRY : Value.t :=
      M.run ltac:(M.monadic (M.alloc (| Value.Integer IntegerKind.U8 4 |))).
    
    Axiom AssociatedConstant_value_ENTRY : M.IsAssociatedConstant Self "value_ENTRY" value_ENTRY.
  End Impl_move_binary_format_file_format_FunctionDefinition.
  
  (* StructTuple
    {
      name := "TypeSignature";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "move_binary_format::file_format::SignatureToken" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_TypeSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::TypeSignature".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructTuple
            "move_binary_format::file_format::TypeSignature"
            [
              M.call_closure (|
                M.get_trait_method (|
                  "core::clone::Clone",
                  Ty.path "move_binary_format::file_format::SignatureToken",
                  [],
                  "clone",
                  []
                |),
                [
                  M.SubPointer.get_struct_tuple_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::TypeSignature",
                    0
                  |)
                ]
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_TypeSignature.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_TypeSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::TypeSignature".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_tuple_field1_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "TypeSignature" |);
              M.alloc (|
                M.SubPointer.get_struct_tuple_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::TypeSignature",
                  0
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_TypeSignature.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_TypeSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::TypeSignature".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_TypeSignature.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_TypeSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::TypeSignature".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::hash::Hash",
              Ty.path "move_binary_format::file_format::SignatureToken",
              [],
              "hash",
              [ __H ]
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::TypeSignature",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_TypeSignature.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_TypeSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::TypeSignature".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_TypeSignature.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_TypeSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::TypeSignature".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialEq",
              Ty.path "move_binary_format::file_format::SignatureToken",
              [ Ty.path "move_binary_format::file_format::SignatureToken" ],
              "eq",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::TypeSignature",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::TypeSignature",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_TypeSignature.
  
  (* StructRecord
    {
      name := "FunctionSignature";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("return_",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::SignatureToken";
                Ty.path "alloc::alloc::Global"
              ]);
          ("parameters",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::SignatureToken";
                Ty.path "alloc::alloc::Global"
              ]);
          ("type_parameters",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::AbilitySet";
                Ty.path "alloc::alloc::Global"
              ])
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionSignature".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::FunctionSignature"
            [
              ("return_",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::SignatureToken";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionSignature",
                      "return_"
                    |)
                  ]
                |));
              ("parameters",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::SignatureToken";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionSignature",
                      "parameters"
                    |)
                  ]
                |));
              ("type_parameters",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::AbilitySet";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionSignature",
                      "type_parameters"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_FunctionSignature.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionSignature".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field3_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "FunctionSignature" |);
              M.read (| Value.String "return_" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionSignature",
                "return_"
              |);
              M.read (| Value.String "parameters" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::FunctionSignature",
                "parameters"
              |);
              M.read (| Value.String "type_parameters" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::FunctionSignature",
                  "type_parameters"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_FunctionSignature.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionSignature".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (M.match_operator (|
                              Value.DeclaredButUndefined,
                              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                            |)))
                      ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_FunctionSignature.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionSignature".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::SignatureToken";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionSignature",
                      "return_"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::SignatureToken";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionSignature",
                      "parameters"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::hash::Hash",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::AbilitySet";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [],
                  "hash",
                  [ __H ]
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FunctionSignature",
                    "type_parameters"
                  |);
                  M.read (| state |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_FunctionSignature.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionSignature".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_FunctionSignature.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionSignature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::FunctionSignature".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            LogicalOp.and (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::SignatureToken";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::SignatureToken";
                        Ty.path "alloc::alloc::Global"
                      ]
                  ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FunctionSignature",
                    "return_"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::FunctionSignature",
                    "return_"
                  |)
                ]
              |),
              ltac:(M.monadic
                (M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::PartialEq",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::SignatureToken";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [
                      Ty.apply
                        (Ty.path "alloc::vec::Vec")
                        []
                        [
                          Ty.path "move_binary_format::file_format::SignatureToken";
                          Ty.path "alloc::alloc::Global"
                        ]
                    ],
                    "eq",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::FunctionSignature",
                      "parameters"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::FunctionSignature",
                      "parameters"
                    |)
                  ]
                |)))
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::AbilitySet";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::AbilitySet";
                        Ty.path "alloc::alloc::Global"
                      ]
                  ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::FunctionSignature",
                    "type_parameters"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::FunctionSignature",
                    "type_parameters"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_FunctionSignature.
  
  (* StructTuple
    {
      name := "Signature";
      const_params := [];
      ty_params := [];
      fields :=
        [
          Ty.apply
            (Ty.path "alloc::vec::Vec")
            []
            [
              Ty.path "move_binary_format::file_format::SignatureToken";
              Ty.path "alloc::alloc::Global"
            ]
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_Signature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Signature".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructTuple
            "move_binary_format::file_format::Signature"
            [
              M.call_closure (|
                M.get_trait_method (|
                  "core::clone::Clone",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::SignatureToken";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [],
                  "clone",
                  []
                |),
                [
                  M.SubPointer.get_struct_tuple_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::Signature",
                    0
                  |)
                ]
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_Signature.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_Signature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Signature".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_tuple_field1_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "Signature" |);
              M.alloc (|
                M.SubPointer.get_struct_tuple_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::Signature",
                  0
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_Signature.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_Signature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Signature".
    
    (* Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructTuple
            "move_binary_format::file_format::Signature"
            [
              M.call_closure (|
                M.get_trait_method (|
                  "core::default::Default",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::SignatureToken";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [],
                  "default",
                  []
                |),
                []
              |)
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_Signature.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_Signature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Signature".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_Signature.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_Signature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Signature".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::hash::Hash",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::SignatureToken";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "hash",
              [ __H ]
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::Signature",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_Signature.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_Signature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Signature".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_Signature.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_Signature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Signature".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialEq",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::SignatureToken";
                  Ty.path "alloc::alloc::Global"
                ],
              [
                Ty.apply
                  (Ty.path "alloc::vec::Vec")
                  []
                  [
                    Ty.path "move_binary_format::file_format::SignatureToken";
                    Ty.path "alloc::alloc::Global"
                  ]
              ],
              "eq",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::Signature",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::Signature",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_Signature.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_Signature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Signature".
    
    (* Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::Ord",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::SignatureToken";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::Signature",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::Signature",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_Signature.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_Signature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Signature".
    
    (* PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::SignatureToken";
                  Ty.path "alloc::alloc::Global"
                ],
              [
                Ty.apply
                  (Ty.path "alloc::vec::Vec")
                  []
                  [
                    Ty.path "move_binary_format::file_format::SignatureToken";
                    Ty.path "alloc::alloc::Global"
                  ]
              ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::Signature",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::Signature",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_Signature.
  
  Module Impl_move_binary_format_file_format_Signature.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Signature".
    
    (*
        pub fn len(&self) -> usize {
            self.0.len()
        }
    *)
    Definition len (ε : 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_associated_function (|
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::SignatureToken";
                  Ty.path "alloc::alloc::Global"
                ],
              "len",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::Signature",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_len : M.IsAssociatedFunction Self "len" len.
    
    (*
        pub fn is_empty(&self) -> bool {
            self.0.is_empty()
        }
    *)
    Definition is_empty (ε : 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_associated_function (|
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::SignatureToken";
                  Ty.path "alloc::alloc::Global"
                ],
              "is_empty",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::Signature",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_empty : M.IsAssociatedFunction Self "is_empty" is_empty.
  End Impl_move_binary_format_file_format_Signature.
  
  Axiom TypeParameterIndex :
    (Ty.path "move_binary_format::file_format::TypeParameterIndex") = (Ty.path "u16").
  
  (*
  Enum Ability
  {
    const_params := [];
    ty_params := [];
    variants :=
      [
        {
          name := "Copy";
          item := StructTuple [];
          discriminant := Some 1;
        };
        {
          name := "Drop";
          item := StructTuple [];
          discriminant := Some 2;
        };
        {
          name := "Store";
          item := StructTuple [];
          discriminant := Some 4;
        };
        {
          name := "Key";
          item := StructTuple [];
          discriminant := Some 8;
        }
      ];
  }
  *)
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_Ability.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_str", [] |),
            [
              M.read (| f |);
              M.read (|
                M.match_operator (|
                  self,
                  [
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let _ :=
                          M.is_struct_tuple (|
                            γ,
                            "move_binary_format::file_format::Ability::Copy"
                          |) in
                        M.alloc (| M.read (| Value.String "Copy" |) |)));
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let _ :=
                          M.is_struct_tuple (|
                            γ,
                            "move_binary_format::file_format::Ability::Drop"
                          |) in
                        M.alloc (| M.read (| Value.String "Drop" |) |)));
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let _ :=
                          M.is_struct_tuple (|
                            γ,
                            "move_binary_format::file_format::Ability::Store"
                          |) in
                        M.alloc (| M.read (| Value.String "Store" |) |)));
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let _ :=
                          M.is_struct_tuple (|
                            γ,
                            "move_binary_format::file_format::Ability::Key"
                          |) in
                        M.alloc (| M.read (| Value.String "Key" |) |)))
                  ]
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_Ability.
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_Ability.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (| M.read (| self |) |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_Ability.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_Ability.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.Tuple []))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_Ability.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_Ability.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_Ability.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_Ability.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Ability" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (| "core::hash::Hash", Ty.path "u8", [], "hash", [ __H ] |),
                [ __self_discr; M.read (| state |) ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_Ability.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_Ability.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    (* Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Ability" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Ability" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (| "core::cmp::Ord", Ty.path "u8", [], "cmp", [] |),
                [ __self_discr; __arg1_discr ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_Ability.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_Ability.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_Ability.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_Ability.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Ability" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Ability" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.alloc (| BinOp.eq (| M.read (| __self_discr |), M.read (| __arg1_discr |) |) |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_Ability.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_Ability.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    (* PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Ability" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Ability" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialOrd",
                  Ty.path "u8",
                  [ Ty.path "u8" ],
                  "partial_cmp",
                  []
                |),
                [ __self_discr; __arg1_discr ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_Ability.
  
  Module Impl_move_binary_format_file_format_Ability.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    (*
        fn from_u8(u: u8) -> Option<Self> {
            match u {
                0x1 => Some(Ability::Copy),
                0x2 => Some(Ability::Drop),
                0x4 => Some(Ability::Store),
                0x8 => Some(Ability::Key),
                _ => None,
            }
        }
    *)
    Definition from_u8 (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ u ] =>
        ltac:(M.monadic
          (let u := M.alloc (| u |) in
          M.read (|
            M.match_operator (|
              u,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_constant_or_break_match (|
                        M.read (| γ |),
                        Value.Integer IntegerKind.U8 1
                      |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::option::Option::Some"
                        [ Value.StructTuple "move_binary_format::file_format::Ability::Copy" [] ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_constant_or_break_match (|
                        M.read (| γ |),
                        Value.Integer IntegerKind.U8 2
                      |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::option::Option::Some"
                        [ Value.StructTuple "move_binary_format::file_format::Ability::Drop" [] ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_constant_or_break_match (|
                        M.read (| γ |),
                        Value.Integer IntegerKind.U8 4
                      |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::option::Option::Some"
                        [ Value.StructTuple "move_binary_format::file_format::Ability::Store" [] ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_constant_or_break_match (|
                        M.read (| γ |),
                        Value.Integer IntegerKind.U8 8
                      |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::option::Option::Some"
                        [ Value.StructTuple "move_binary_format::file_format::Ability::Key" [] ]
                    |)));
                fun γ =>
                  ltac:(M.monadic (M.alloc (| Value.StructTuple "core::option::Option::None" [] |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_from_u8 : M.IsAssociatedFunction Self "from_u8" from_u8.
    
    (*
        pub fn requires(self) -> Self {
            match self {
                Self::Copy => Ability::Copy,
                Self::Drop => Ability::Drop,
                Self::Store => Ability::Store,
                Self::Key => Ability::Store,
            }
        }
    *)
    Definition requires (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Ability::Copy" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Ability::Copy" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Ability::Drop" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Ability::Drop" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Ability::Store"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Ability::Store" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Ability::Key" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Ability::Store" []
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_requires : M.IsAssociatedFunction Self "requires" requires.
    
    (*
        pub fn required_by(self) -> AbilitySet {
            match self {
                Self::Copy => AbilitySet::EMPTY | Ability::Copy,
                Self::Drop => AbilitySet::EMPTY | Ability::Drop,
                Self::Store => AbilitySet::EMPTY | Ability::Store | Ability::Key,
                Self::Key => AbilitySet::EMPTY,
            }
        }
    *)
    Definition required_by (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Ability::Copy" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::ops::bit::BitOr",
                          Ty.path "move_binary_format::file_format::AbilitySet",
                          [ Ty.path "move_binary_format::file_format::Ability" ],
                          "bitor",
                          []
                        |),
                        [
                          M.read (|
                            M.get_constant (| "move_binary_format::file_format::EMPTY" |)
                          |);
                          Value.StructTuple "move_binary_format::file_format::Ability::Copy" []
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Ability::Drop" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::ops::bit::BitOr",
                          Ty.path "move_binary_format::file_format::AbilitySet",
                          [ Ty.path "move_binary_format::file_format::Ability" ],
                          "bitor",
                          []
                        |),
                        [
                          M.read (|
                            M.get_constant (| "move_binary_format::file_format::EMPTY" |)
                          |);
                          Value.StructTuple "move_binary_format::file_format::Ability::Drop" []
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Ability::Store"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::ops::bit::BitOr",
                          Ty.path "move_binary_format::file_format::AbilitySet",
                          [ Ty.path "move_binary_format::file_format::Ability" ],
                          "bitor",
                          []
                        |),
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::ops::bit::BitOr",
                              Ty.path "move_binary_format::file_format::AbilitySet",
                              [ Ty.path "move_binary_format::file_format::Ability" ],
                              "bitor",
                              []
                            |),
                            [
                              M.read (|
                                M.get_constant (| "move_binary_format::file_format::EMPTY" |)
                              |);
                              Value.StructTuple "move_binary_format::file_format::Ability::Store" []
                            ]
                          |);
                          Value.StructTuple "move_binary_format::file_format::Ability::Key" []
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Ability::Key" |) in
                    M.get_constant (| "move_binary_format::file_format::EMPTY" |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_required_by : M.IsAssociatedFunction Self "required_by" required_by.
  End Impl_move_binary_format_file_format_Ability.
  
  (* StructTuple
    {
      name := "AbilitySet";
      const_params := [];
      ty_params := [];
      fields := [ Ty.path "u8" ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.read (| self |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_AbilitySet.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_AbilitySet.
  
  Module Impl_core_marker_Copy_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::Copy"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_Copy_for_move_binary_format_file_format_AbilitySet.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.call_closure (|
            M.get_trait_method (| "core::hash::Hash", Ty.path "u8", [], "hash", [ __H ] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::AbilitySet",
                0
              |);
              M.read (| state |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_AbilitySet.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (* Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (| "core::cmp::Ord", Ty.path "u8", [], "cmp", [] |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::AbilitySet",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::AbilitySet",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_AbilitySet.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_AbilitySet.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          BinOp.eq (|
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::AbilitySet",
                0
              |)
            |),
            M.read (|
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::AbilitySet",
                0
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_AbilitySet.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (* PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::cmp::PartialOrd",
              Ty.path "u8",
              [ Ty.path "u8" ],
              "partial_cmp",
              []
            |),
            [
              M.SubPointer.get_struct_tuple_field (|
                M.read (| self |),
                "move_binary_format::file_format::AbilitySet",
                0
              |);
              M.SubPointer.get_struct_tuple_field (|
                M.read (| other |),
                "move_binary_format::file_format::AbilitySet",
                0
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_AbilitySet.
  
  
  
  Module Impl_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (*     pub const EMPTY: Self = Self(0); *)
    (* Ty.path "move_binary_format::file_format::AbilitySet" *)
    Definition value_EMPTY : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (|
            Value.StructTuple
              "move_binary_format::file_format::AbilitySet"
              [ Value.Integer IntegerKind.U8 0 ]
          |))).
    
    Axiom AssociatedConstant_value_EMPTY : M.IsAssociatedConstant Self "value_EMPTY" value_EMPTY.
    
    (*
        pub const PRIMITIVES: AbilitySet =
            Self((Ability::Copy as u8) | (Ability::Drop as u8) | (Ability::Store as u8));
    *)
    (* Ty.path "move_binary_format::file_format::AbilitySet" *)
    Definition value_PRIMITIVES : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (|
            Value.StructTuple
              "move_binary_format::file_format::AbilitySet"
              [
                BinOp.bit_or
                  (BinOp.bit_or
                    (M.rust_cast
                      (BinOp.Wrap.add (|
                        M.get_constant (|
                          "move_binary_format::file_format::Ability::Copy_discriminant"
                        |),
                        Value.Integer IntegerKind.U8 0
                      |)))
                    (M.rust_cast
                      (BinOp.Wrap.add (|
                        M.get_constant (|
                          "move_binary_format::file_format::Ability::Drop_discriminant"
                        |),
                        Value.Integer IntegerKind.U8 0
                      |))))
                  (M.rust_cast
                    (BinOp.Wrap.add (|
                      M.get_constant (|
                        "move_binary_format::file_format::Ability::Store_discriminant"
                      |),
                      Value.Integer IntegerKind.U8 0
                    |)))
              ]
          |))).
    
    Axiom AssociatedConstant_value_PRIMITIVES :
      M.IsAssociatedConstant Self "value_PRIMITIVES" value_PRIMITIVES.
    
    (*     pub const REFERENCES: AbilitySet = Self((Ability::Copy as u8) | (Ability::Drop as u8)); *)
    (* Ty.path "move_binary_format::file_format::AbilitySet" *)
    Definition value_REFERENCES : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (|
            Value.StructTuple
              "move_binary_format::file_format::AbilitySet"
              [
                BinOp.bit_or
                  (M.rust_cast
                    (BinOp.Wrap.add (|
                      M.get_constant (|
                        "move_binary_format::file_format::Ability::Copy_discriminant"
                      |),
                      Value.Integer IntegerKind.U8 0
                    |)))
                  (M.rust_cast
                    (BinOp.Wrap.add (|
                      M.get_constant (|
                        "move_binary_format::file_format::Ability::Drop_discriminant"
                      |),
                      Value.Integer IntegerKind.U8 0
                    |)))
              ]
          |))).
    
    Axiom AssociatedConstant_value_REFERENCES :
      M.IsAssociatedConstant Self "value_REFERENCES" value_REFERENCES.
    
    (*     pub const SIGNER: AbilitySet = Self(Ability::Drop as u8); *)
    (* Ty.path "move_binary_format::file_format::AbilitySet" *)
    Definition value_SIGNER : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (|
            Value.StructTuple
              "move_binary_format::file_format::AbilitySet"
              [
                M.rust_cast
                  (BinOp.Wrap.add (|
                    M.get_constant (|
                      "move_binary_format::file_format::Ability::Drop_discriminant"
                    |),
                    Value.Integer IntegerKind.U8 0
                  |))
              ]
          |))).
    
    Axiom AssociatedConstant_value_SIGNER : M.IsAssociatedConstant Self "value_SIGNER" value_SIGNER.
    
    (*
        pub const VECTOR: AbilitySet =
            Self((Ability::Copy as u8) | (Ability::Drop as u8) | (Ability::Store as u8));
    *)
    (* Ty.path "move_binary_format::file_format::AbilitySet" *)
    Definition value_VECTOR : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (|
            Value.StructTuple
              "move_binary_format::file_format::AbilitySet"
              [
                BinOp.bit_or
                  (BinOp.bit_or
                    (M.rust_cast
                      (BinOp.Wrap.add (|
                        M.get_constant (|
                          "move_binary_format::file_format::Ability::Copy_discriminant"
                        |),
                        Value.Integer IntegerKind.U8 0
                      |)))
                    (M.rust_cast
                      (BinOp.Wrap.add (|
                        M.get_constant (|
                          "move_binary_format::file_format::Ability::Drop_discriminant"
                        |),
                        Value.Integer IntegerKind.U8 0
                      |))))
                  (M.rust_cast
                    (BinOp.Wrap.add (|
                      M.get_constant (|
                        "move_binary_format::file_format::Ability::Store_discriminant"
                      |),
                      Value.Integer IntegerKind.U8 0
                    |)))
              ]
          |))).
    
    Axiom AssociatedConstant_value_VECTOR : M.IsAssociatedConstant Self "value_VECTOR" value_VECTOR.
    
    (*
        pub const ALL: Self = Self(
            // Cannot use AbilitySet bitor because it is not const
            (Ability::Copy as u8)
                | (Ability::Drop as u8)
                | (Ability::Store as u8)
                | (Ability::Key as u8),
        );
    *)
    (* Ty.path "move_binary_format::file_format::AbilitySet" *)
    Definition value_ALL : Value.t :=
      M.run
        ltac:(M.monadic
          (M.alloc (|
            Value.StructTuple
              "move_binary_format::file_format::AbilitySet"
              [
                BinOp.bit_or
                  (BinOp.bit_or
                    (BinOp.bit_or
                      (M.rust_cast
                        (BinOp.Wrap.add (|
                          M.get_constant (|
                            "move_binary_format::file_format::Ability::Copy_discriminant"
                          |),
                          Value.Integer IntegerKind.U8 0
                        |)))
                      (M.rust_cast
                        (BinOp.Wrap.add (|
                          M.get_constant (|
                            "move_binary_format::file_format::Ability::Drop_discriminant"
                          |),
                          Value.Integer IntegerKind.U8 0
                        |))))
                    (M.rust_cast
                      (BinOp.Wrap.add (|
                        M.get_constant (|
                          "move_binary_format::file_format::Ability::Store_discriminant"
                        |),
                        Value.Integer IntegerKind.U8 0
                      |))))
                  (M.rust_cast
                    (BinOp.Wrap.add (|
                      M.get_constant (|
                        "move_binary_format::file_format::Ability::Key_discriminant"
                      |),
                      Value.Integer IntegerKind.U8 0
                    |)))
              ]
          |))).
    
    Axiom AssociatedConstant_value_ALL : M.IsAssociatedConstant Self "value_ALL" value_ALL.
    
    (*
        pub fn singleton(ability: Ability) -> Self {
            Self(ability as u8)
        }
    *)
    Definition singleton (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ ability ] =>
        ltac:(M.monadic
          (let ability := M.alloc (| ability |) in
          Value.StructTuple
            "move_binary_format::file_format::AbilitySet"
            [ M.rust_cast (M.read (| ability |)) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_singleton : M.IsAssociatedFunction Self "singleton" singleton.
    
    (*
        pub fn has_ability(self, ability: Ability) -> bool {
            let a = ability as u8;
            (a & self.0) == a
        }
    *)
    Definition has_ability (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; ability ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let ability := M.alloc (| ability |) in
          M.read (|
            let~ a := M.alloc (| M.rust_cast (M.read (| ability |)) |) in
            M.alloc (|
              BinOp.eq (|
                BinOp.bit_and
                  (M.read (| a |))
                  (M.read (|
                    M.SubPointer.get_struct_tuple_field (|
                      self,
                      "move_binary_format::file_format::AbilitySet",
                      0
                    |)
                  |)),
                M.read (| a |)
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_has_ability : M.IsAssociatedFunction Self "has_ability" has_ability.
    
    (*
        pub fn has_copy(self) -> bool {
            self.has_ability(Ability::Copy)
        }
    *)
    Definition has_copy (ε : 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_associated_function (|
              Ty.path "move_binary_format::file_format::AbilitySet",
              "has_ability",
              []
            |),
            [
              M.read (| self |);
              Value.StructTuple "move_binary_format::file_format::Ability::Copy" []
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_has_copy : M.IsAssociatedFunction Self "has_copy" has_copy.
    
    (*
        pub fn has_drop(self) -> bool {
            self.has_ability(Ability::Drop)
        }
    *)
    Definition has_drop (ε : 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_associated_function (|
              Ty.path "move_binary_format::file_format::AbilitySet",
              "has_ability",
              []
            |),
            [
              M.read (| self |);
              Value.StructTuple "move_binary_format::file_format::Ability::Drop" []
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_has_drop : M.IsAssociatedFunction Self "has_drop" has_drop.
    
    (*
        pub fn has_store(self) -> bool {
            self.has_ability(Ability::Store)
        }
    *)
    Definition has_store (ε : 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_associated_function (|
              Ty.path "move_binary_format::file_format::AbilitySet",
              "has_ability",
              []
            |),
            [
              M.read (| self |);
              Value.StructTuple "move_binary_format::file_format::Ability::Store" []
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_has_store : M.IsAssociatedFunction Self "has_store" has_store.
    
    (*
        pub fn has_key(self) -> bool {
            self.has_ability(Ability::Key)
        }
    *)
    Definition has_key (ε : 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_associated_function (|
              Ty.path "move_binary_format::file_format::AbilitySet",
              "has_ability",
              []
            |),
            [
              M.read (| self |);
              Value.StructTuple "move_binary_format::file_format::Ability::Key" []
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_has_key : M.IsAssociatedFunction Self "has_key" has_key.
    
    (*
        pub fn remove(self, ability: Ability) -> Self {
            Self(self.0 & (!(ability as u8)))
        }
    *)
    Definition remove (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; ability ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let ability := M.alloc (| ability |) in
          Value.StructTuple
            "move_binary_format::file_format::AbilitySet"
            [
              BinOp.bit_and
                (M.read (|
                  M.SubPointer.get_struct_tuple_field (|
                    self,
                    "move_binary_format::file_format::AbilitySet",
                    0
                  |)
                |))
                (UnOp.not (| M.rust_cast (M.read (| ability |)) |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_remove : M.IsAssociatedFunction Self "remove" remove.
    
    (*
        pub fn intersect(self, other: Self) -> Self {
            Self(self.0 & other.0)
        }
    *)
    Definition intersect (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          Value.StructTuple
            "move_binary_format::file_format::AbilitySet"
            [
              BinOp.bit_and
                (M.read (|
                  M.SubPointer.get_struct_tuple_field (|
                    self,
                    "move_binary_format::file_format::AbilitySet",
                    0
                  |)
                |))
                (M.read (|
                  M.SubPointer.get_struct_tuple_field (|
                    other,
                    "move_binary_format::file_format::AbilitySet",
                    0
                  |)
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_intersect : M.IsAssociatedFunction Self "intersect" intersect.
    
    (*
        pub fn union(self, other: Self) -> Self {
            Self(self.0 | other.0)
        }
    *)
    Definition union (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          Value.StructTuple
            "move_binary_format::file_format::AbilitySet"
            [
              BinOp.bit_or
                (M.read (|
                  M.SubPointer.get_struct_tuple_field (|
                    self,
                    "move_binary_format::file_format::AbilitySet",
                    0
                  |)
                |))
                (M.read (|
                  M.SubPointer.get_struct_tuple_field (|
                    other,
                    "move_binary_format::file_format::AbilitySet",
                    0
                  |)
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_union : M.IsAssociatedFunction Self "union" union.
    
    (*
        fn is_subset_bits(sub: u8, sup: u8) -> bool {
            (sub & sup) == sub
        }
    *)
    Definition is_subset_bits (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ sub; sup ] =>
        ltac:(M.monadic
          (let sub := M.alloc (| sub |) in
          let sup := M.alloc (| sup |) in
          BinOp.eq (| BinOp.bit_and (M.read (| sub |)) (M.read (| sup |)), M.read (| sub |) |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_subset_bits :
      M.IsAssociatedFunction Self "is_subset_bits" is_subset_bits.
    
    (*
        pub fn is_subset(self, other: Self) -> bool {
            Self::is_subset_bits(self.0, other.0)
        }
    *)
    Definition is_subset (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "move_binary_format::file_format::AbilitySet",
              "is_subset_bits",
              []
            |),
            [
              M.read (|
                M.SubPointer.get_struct_tuple_field (|
                  self,
                  "move_binary_format::file_format::AbilitySet",
                  0
                |)
              |);
              M.read (|
                M.SubPointer.get_struct_tuple_field (|
                  other,
                  "move_binary_format::file_format::AbilitySet",
                  0
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_subset : M.IsAssociatedFunction Self "is_subset" is_subset.
    
    (*
        pub fn polymorphic_abilities<I1, I2>(
            declared_abilities: Self,
            declared_phantom_parameters: I1,
            type_arguments: I2,
        ) -> PartialVMResult<Self>
        where
            I1: IntoIterator<Item = bool>,
            I2: IntoIterator<Item = Self>,
            I1::IntoIter: ExactSizeIterator,
            I2::IntoIter: ExactSizeIterator,
        {
            let declared_phantom_parameters = declared_phantom_parameters.into_iter();
            let type_arguments = type_arguments.into_iter();
    
            if declared_phantom_parameters.len() != type_arguments.len() {
                return Err(
                    PartialVMError::new(StatusCode::VERIFIER_INVARIANT_VIOLATION).with_message(
                        "the length of `declared_phantom_parameters` doesn't match the length of `type_arguments`".to_string(),
                    ),
                );
            }
    
            // Conceptually this is performing the following operation:
            // For any ability 'a' in `declared_abilities`
            // 'a' is in the result only if
            //   for all (abi_i, is_phantom_i) in `type_arguments` s.t. !is_phantom then a.required() is a subset of abi_i
            //
            // So to do this efficiently, we can determine the required_by set for each ti
            // and intersect them together along with the declared abilities
            // This only works because for any ability y, |y.requires()| == 1
            let abs = type_arguments
                .zip(declared_phantom_parameters)
                .filter(|(_, is_phantom)| !is_phantom)
                .map(|(ty_arg_abilities, _)| {
                    ty_arg_abilities
                        .into_iter()
                        .map(|a| a.required_by())
                        .fold(AbilitySet::EMPTY, AbilitySet::union)
                })
                .fold(declared_abilities, |acc, ty_arg_abilities| {
                    acc.intersect(ty_arg_abilities)
                });
            Ok(abs)
        }
    *)
    Definition polymorphic_abilities (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ I1; I2 ], [ declared_abilities; declared_phantom_parameters; type_arguments ] =>
        ltac:(M.monadic
          (let declared_abilities := M.alloc (| declared_abilities |) in
          let declared_phantom_parameters := M.alloc (| declared_phantom_parameters |) in
          let type_arguments := M.alloc (| type_arguments |) in
          M.catch_return (|
            ltac:(M.monadic
              (M.read (|
                let~ declared_phantom_parameters :=
                  M.alloc (|
                    M.call_closure (|
                      M.get_trait_method (|
                        "core::iter::traits::collect::IntoIterator",
                        I1,
                        [],
                        "into_iter",
                        []
                      |),
                      [ M.read (| declared_phantom_parameters |) ]
                    |)
                  |) in
                let~ type_arguments :=
                  M.alloc (|
                    M.call_closure (|
                      M.get_trait_method (|
                        "core::iter::traits::collect::IntoIterator",
                        I2,
                        [],
                        "into_iter",
                        []
                      |),
                      [ M.read (| type_arguments |) ]
                    |)
                  |) in
                let~ _ :=
                  M.match_operator (|
                    M.alloc (| Value.Tuple [] |),
                    [
                      fun γ =>
                        ltac:(M.monadic
                          (let γ :=
                            M.use
                              (M.alloc (|
                                BinOp.ne (|
                                  M.call_closure (|
                                    M.get_trait_method (|
                                      "core::iter::traits::exact_size::ExactSizeIterator",
                                      Ty.associated,
                                      [],
                                      "len",
                                      []
                                    |),
                                    [ declared_phantom_parameters ]
                                  |),
                                  M.call_closure (|
                                    M.get_trait_method (|
                                      "core::iter::traits::exact_size::ExactSizeIterator",
                                      Ty.associated,
                                      [],
                                      "len",
                                      []
                                    |),
                                    [ type_arguments ]
                                  |)
                                |)
                              |)) in
                          let _ :=
                            M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                          M.alloc (|
                            M.never_to_any (|
                              M.read (|
                                M.return_ (|
                                  Value.StructTuple
                                    "core::result::Result::Err"
                                    [
                                      M.call_closure (|
                                        M.get_associated_function (|
                                          Ty.path "move_binary_format::errors::PartialVMError",
                                          "with_message",
                                          []
                                        |),
                                        [
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.path "move_binary_format::errors::PartialVMError",
                                              "new",
                                              []
                                            |),
                                            [
                                              Value.StructTuple
                                                "move_core_types::vm_status::StatusCode::VERIFIER_INVARIANT_VIOLATION"
                                                []
                                            ]
                                          |);
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "alloc::string::ToString",
                                              Ty.path "str",
                                              [],
                                              "to_string",
                                              []
                                            |),
                                            [
                                              M.read (|
                                                Value.String
                                                  "the length of `declared_phantom_parameters` doesn't match the length of `type_arguments`"
                                              |)
                                            ]
                                          |)
                                        ]
                                      |)
                                    ]
                                |)
                              |)
                            |)
                          |)));
                      fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                    ]
                  |) in
                let~ abs :=
                  M.alloc (|
                    M.call_closure (|
                      M.get_trait_method (|
                        "core::iter::traits::iterator::Iterator",
                        Ty.apply
                          (Ty.path "core::iter::adapters::map::Map")
                          []
                          [
                            Ty.apply
                              (Ty.path "core::iter::adapters::filter::Filter")
                              []
                              [
                                Ty.apply
                                  (Ty.path "core::iter::adapters::zip::Zip")
                                  []
                                  [ Ty.associated; Ty.associated ];
                                Ty.function
                                  [
                                    Ty.tuple
                                      [
                                        Ty.apply
                                          (Ty.path "&")
                                          []
                                          [
                                            Ty.tuple
                                              [
                                                Ty.path
                                                  "move_binary_format::file_format::AbilitySet";
                                                Ty.path "bool"
                                              ]
                                          ]
                                      ]
                                  ]
                                  (Ty.path "bool")
                              ];
                            Ty.function
                              [
                                Ty.tuple
                                  [
                                    Ty.tuple
                                      [
                                        Ty.path "move_binary_format::file_format::AbilitySet";
                                        Ty.path "bool"
                                      ]
                                  ]
                              ]
                              (Ty.path "move_binary_format::file_format::AbilitySet")
                          ],
                        [],
                        "fold",
                        [
                          Ty.path "move_binary_format::file_format::AbilitySet";
                          Ty.function
                            [
                              Ty.tuple
                                [
                                  Ty.path "move_binary_format::file_format::AbilitySet";
                                  Ty.path "move_binary_format::file_format::AbilitySet"
                                ]
                            ]
                            (Ty.path "move_binary_format::file_format::AbilitySet")
                        ]
                      |),
                      [
                        M.call_closure (|
                          M.get_trait_method (|
                            "core::iter::traits::iterator::Iterator",
                            Ty.apply
                              (Ty.path "core::iter::adapters::filter::Filter")
                              []
                              [
                                Ty.apply
                                  (Ty.path "core::iter::adapters::zip::Zip")
                                  []
                                  [ Ty.associated; Ty.associated ];
                                Ty.function
                                  [
                                    Ty.tuple
                                      [
                                        Ty.apply
                                          (Ty.path "&")
                                          []
                                          [
                                            Ty.tuple
                                              [
                                                Ty.path
                                                  "move_binary_format::file_format::AbilitySet";
                                                Ty.path "bool"
                                              ]
                                          ]
                                      ]
                                  ]
                                  (Ty.path "bool")
                              ],
                            [],
                            "map",
                            [
                              Ty.path "move_binary_format::file_format::AbilitySet";
                              Ty.function
                                [
                                  Ty.tuple
                                    [
                                      Ty.tuple
                                        [
                                          Ty.path "move_binary_format::file_format::AbilitySet";
                                          Ty.path "bool"
                                        ]
                                    ]
                                ]
                                (Ty.path "move_binary_format::file_format::AbilitySet")
                            ]
                          |),
                          [
                            M.call_closure (|
                              M.get_trait_method (|
                                "core::iter::traits::iterator::Iterator",
                                Ty.apply
                                  (Ty.path "core::iter::adapters::zip::Zip")
                                  []
                                  [ Ty.associated; Ty.associated ],
                                [],
                                "filter",
                                [
                                  Ty.function
                                    [
                                      Ty.tuple
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.tuple
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::AbilitySet";
                                                  Ty.path "bool"
                                                ]
                                            ]
                                        ]
                                    ]
                                    (Ty.path "bool")
                                ]
                              |),
                              [
                                M.call_closure (|
                                  M.get_trait_method (|
                                    "core::iter::traits::iterator::Iterator",
                                    Ty.associated,
                                    [],
                                    "zip",
                                    [ Ty.associated ]
                                  |),
                                  [
                                    M.read (| type_arguments |);
                                    M.read (| declared_phantom_parameters |)
                                  ]
                                |);
                                M.closure
                                  (fun γ =>
                                    ltac:(M.monadic
                                      match γ with
                                      | [ α0 ] =>
                                        ltac:(M.monadic
                                          (M.match_operator (|
                                            M.alloc (| α0 |),
                                            [
                                              fun γ =>
                                                ltac:(M.monadic
                                                  (let γ := M.read (| γ |) in
                                                  let γ1_0 :=
                                                    M.SubPointer.get_tuple_field (| γ, 0 |) in
                                                  let γ1_1 :=
                                                    M.SubPointer.get_tuple_field (| γ, 1 |) in
                                                  let is_phantom := M.alloc (| γ1_1 |) in
                                                  M.call_closure (|
                                                    M.get_trait_method (|
                                                      "core::ops::bit::Not",
                                                      Ty.apply (Ty.path "&") [] [ Ty.path "bool" ],
                                                      [],
                                                      "not",
                                                      []
                                                    |),
                                                    [ M.read (| is_phantom |) ]
                                                  |)))
                                            ]
                                          |)))
                                      | _ => M.impossible "wrong number of arguments"
                                      end))
                              ]
                            |);
                            M.closure
                              (fun γ =>
                                ltac:(M.monadic
                                  match γ with
                                  | [ α0 ] =>
                                    ltac:(M.monadic
                                      (M.match_operator (|
                                        M.alloc (| α0 |),
                                        [
                                          fun γ =>
                                            ltac:(M.monadic
                                              (let γ0_0 :=
                                                M.SubPointer.get_tuple_field (| γ, 0 |) in
                                              let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                                              let ty_arg_abilities := M.copy (| γ0_0 |) in
                                              M.call_closure (|
                                                M.get_trait_method (|
                                                  "core::iter::traits::iterator::Iterator",
                                                  Ty.apply
                                                    (Ty.path "core::iter::adapters::map::Map")
                                                    []
                                                    [
                                                      Ty.path
                                                        "move_binary_format::file_format::AbilitySetIterator";
                                                      Ty.function
                                                        [
                                                          Ty.tuple
                                                            [
                                                              Ty.path
                                                                "move_binary_format::file_format::Ability"
                                                            ]
                                                        ]
                                                        (Ty.path
                                                          "move_binary_format::file_format::AbilitySet")
                                                    ],
                                                  [],
                                                  "fold",
                                                  [
                                                    Ty.path
                                                      "move_binary_format::file_format::AbilitySet";
                                                    Ty.function
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::AbilitySet";
                                                        Ty.path
                                                          "move_binary_format::file_format::AbilitySet"
                                                      ]
                                                      (Ty.path
                                                        "move_binary_format::file_format::AbilitySet")
                                                  ]
                                                |),
                                                [
                                                  M.call_closure (|
                                                    M.get_trait_method (|
                                                      "core::iter::traits::iterator::Iterator",
                                                      Ty.path
                                                        "move_binary_format::file_format::AbilitySetIterator",
                                                      [],
                                                      "map",
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::AbilitySet";
                                                        Ty.function
                                                          [
                                                            Ty.tuple
                                                              [
                                                                Ty.path
                                                                  "move_binary_format::file_format::Ability"
                                                              ]
                                                          ]
                                                          (Ty.path
                                                            "move_binary_format::file_format::AbilitySet")
                                                      ]
                                                    |),
                                                    [
                                                      M.call_closure (|
                                                        M.get_trait_method (|
                                                          "core::iter::traits::collect::IntoIterator",
                                                          Ty.path
                                                            "move_binary_format::file_format::AbilitySet",
                                                          [],
                                                          "into_iter",
                                                          []
                                                        |),
                                                        [ M.read (| ty_arg_abilities |) ]
                                                      |);
                                                      M.closure
                                                        (fun γ =>
                                                          ltac:(M.monadic
                                                            match γ with
                                                            | [ α0 ] =>
                                                              ltac:(M.monadic
                                                                (M.match_operator (|
                                                                  M.alloc (| α0 |),
                                                                  [
                                                                    fun γ =>
                                                                      ltac:(M.monadic
                                                                        (let a := M.copy (| γ |) in
                                                                        M.call_closure (|
                                                                          M.get_associated_function (|
                                                                            Ty.path
                                                                              "move_binary_format::file_format::Ability",
                                                                            "required_by",
                                                                            []
                                                                          |),
                                                                          [ M.read (| a |) ]
                                                                        |)))
                                                                  ]
                                                                |)))
                                                            | _ =>
                                                              M.impossible
                                                                "wrong number of arguments"
                                                            end))
                                                    ]
                                                  |);
                                                  M.read (|
                                                    M.get_constant (|
                                                      "move_binary_format::file_format::EMPTY"
                                                    |)
                                                  |);
                                                  M.get_associated_function (|
                                                    Ty.path
                                                      "move_binary_format::file_format::AbilitySet",
                                                    "union",
                                                    []
                                                  |)
                                                ]
                                              |)))
                                        ]
                                      |)))
                                  | _ => M.impossible "wrong number of arguments"
                                  end))
                          ]
                        |);
                        M.read (| declared_abilities |);
                        M.closure
                          (fun γ =>
                            ltac:(M.monadic
                              match γ with
                              | [ α0; α1 ] =>
                                ltac:(M.monadic
                                  (M.match_operator (|
                                    M.alloc (| α0 |),
                                    [
                                      fun γ =>
                                        ltac:(M.monadic
                                          (let acc := M.copy (| γ |) in
                                          M.match_operator (|
                                            M.alloc (| α1 |),
                                            [
                                              fun γ =>
                                                ltac:(M.monadic
                                                  (let ty_arg_abilities := M.copy (| γ |) in
                                                  M.call_closure (|
                                                    M.get_associated_function (|
                                                      Ty.path
                                                        "move_binary_format::file_format::AbilitySet",
                                                      "intersect",
                                                      []
                                                    |),
                                                    [
                                                      M.read (| acc |);
                                                      M.read (| ty_arg_abilities |)
                                                    ]
                                                  |)))
                                            ]
                                          |)))
                                    ]
                                  |)))
                              | _ => M.impossible "wrong number of arguments"
                              end))
                      ]
                    |)
                  |) in
                M.alloc (| Value.StructTuple "core::result::Result::Ok" [ M.read (| abs |) ] |)
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_polymorphic_abilities :
      M.IsAssociatedFunction Self "polymorphic_abilities" polymorphic_abilities.
    
    (*
        pub fn from_u8(byte: u8) -> Option<Self> {
            // If there is a bit set in the read `byte`, that bit must be set in the
            // `AbilitySet` containing all `Ability`s
            // This corresponds the byte being a bit set subset of ALL
            // The byte is a subset of ALL if the intersection of the two is the original byte
            if Self::is_subset_bits(byte, Self::ALL.0) {
                Some(Self(byte))
            } else {
                None
            }
        }
    *)
    Definition from_u8 (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ byte ] =>
        ltac:(M.monadic
          (let byte := M.alloc (| byte |) in
          M.read (|
            M.match_operator (|
              M.alloc (| Value.Tuple [] |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ :=
                      M.use
                        (M.alloc (|
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "move_binary_format::file_format::AbilitySet",
                              "is_subset_bits",
                              []
                            |),
                            [
                              M.read (| byte |);
                              M.read (|
                                M.SubPointer.get_struct_tuple_field (|
                                  M.get_constant (| "move_binary_format::file_format::ALL" |),
                                  "move_binary_format::file_format::AbilitySet",
                                  0
                                |)
                              |)
                            ]
                          |)
                        |)) in
                    let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::option::Option::Some"
                        [
                          Value.StructTuple
                            "move_binary_format::file_format::AbilitySet"
                            [ M.read (| byte |) ]
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic (M.alloc (| Value.StructTuple "core::option::Option::None" [] |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_from_u8 : M.IsAssociatedFunction Self "from_u8" from_u8.
    
    (*
        pub fn into_u8(self) -> u8 {
            self.0
        }
    *)
    Definition into_u8 (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.SubPointer.get_struct_tuple_field (|
              self,
              "move_binary_format::file_format::AbilitySet",
              0
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_into_u8 : M.IsAssociatedFunction Self "into_u8" into_u8.
  End Impl_move_binary_format_file_format_AbilitySet.
  
  Module Impl_core_ops_bit_BitOr_move_binary_format_file_format_Ability_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (*     type Output = Self; *)
    Definition _Output : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (*
        fn bitor(self, rhs: Ability) -> Self {
            AbilitySet(self.0 | (rhs as u8))
        }
    *)
    Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; rhs ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let rhs := M.alloc (| rhs |) in
          Value.StructTuple
            "move_binary_format::file_format::AbilitySet"
            [
              BinOp.bit_or
                (M.read (|
                  M.SubPointer.get_struct_tuple_field (|
                    self,
                    "move_binary_format::file_format::AbilitySet",
                    0
                  |)
                |))
                (M.rust_cast (M.read (| rhs |)))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::bit::BitOr"
        Self
        (* Trait polymorphic types *)
        [ (* Rhs *) Ty.path "move_binary_format::file_format::Ability" ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
  End Impl_core_ops_bit_BitOr_move_binary_format_file_format_Ability_for_move_binary_format_file_format_AbilitySet.
  
  Module Impl_core_ops_bit_BitOr_move_binary_format_file_format_AbilitySet_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (*     type Output = Self; *)
    Definition _Output : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (*
        fn bitor(self, rhs: Self) -> Self {
            AbilitySet(self.0 | rhs.0)
        }
    *)
    Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; rhs ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let rhs := M.alloc (| rhs |) in
          Value.StructTuple
            "move_binary_format::file_format::AbilitySet"
            [
              BinOp.bit_or
                (M.read (|
                  M.SubPointer.get_struct_tuple_field (|
                    self,
                    "move_binary_format::file_format::AbilitySet",
                    0
                  |)
                |))
                (M.read (|
                  M.SubPointer.get_struct_tuple_field (|
                    rhs,
                    "move_binary_format::file_format::AbilitySet",
                    0
                  |)
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::bit::BitOr"
        Self
        (* Trait polymorphic types *)
        [ (* Rhs *) Ty.path "move_binary_format::file_format::AbilitySet" ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
  End Impl_core_ops_bit_BitOr_move_binary_format_file_format_AbilitySet_for_move_binary_format_file_format_AbilitySet.
  
  (* StructRecord
    {
      name := "AbilitySetIterator";
      const_params := [];
      ty_params := [];
      fields :=
        [ ("set", Ty.path "move_binary_format::file_format::AbilitySet"); ("idx", Ty.path "u8") ];
    } *)
  
  Module Impl_core_iter_traits_iterator_Iterator_for_move_binary_format_file_format_AbilitySetIterator.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySetIterator".
    
    (*     type Item = Ability; *)
    Definition _Item : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    (*
        fn next(&mut self) -> Option<Self::Item> {
            while self.idx <= 0x8 {
                let next = Ability::from_u8(self.set.0 & self.idx);
                self.idx <<= 1;
                if next.is_some() {
                    return next;
                }
            }
            None
        }
    *)
    Definition next (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.catch_return (|
            ltac:(M.monadic
              (M.read (|
                let~ _ :=
                  M.loop (|
                    ltac:(M.monadic
                      (M.match_operator (|
                        M.alloc (| Value.Tuple [] |),
                        [
                          fun γ =>
                            ltac:(M.monadic
                              (let γ :=
                                M.use
                                  (M.alloc (|
                                    BinOp.le (|
                                      M.read (|
                                        M.SubPointer.get_struct_record_field (|
                                          M.read (| self |),
                                          "move_binary_format::file_format::AbilitySetIterator",
                                          "idx"
                                        |)
                                      |),
                                      Value.Integer IntegerKind.U8 8
                                    |)
                                  |)) in
                              let _ :=
                                M.is_constant_or_break_match (|
                                  M.read (| γ |),
                                  Value.Bool true
                                |) in
                              let~ next :=
                                M.alloc (|
                                  M.call_closure (|
                                    M.get_associated_function (|
                                      Ty.path "move_binary_format::file_format::Ability",
                                      "from_u8",
                                      []
                                    |),
                                    [
                                      BinOp.bit_and
                                        (M.read (|
                                          M.SubPointer.get_struct_tuple_field (|
                                            M.SubPointer.get_struct_record_field (|
                                              M.read (| self |),
                                              "move_binary_format::file_format::AbilitySetIterator",
                                              "set"
                                            |),
                                            "move_binary_format::file_format::AbilitySet",
                                            0
                                          |)
                                        |))
                                        (M.read (|
                                          M.SubPointer.get_struct_record_field (|
                                            M.read (| self |),
                                            "move_binary_format::file_format::AbilitySetIterator",
                                            "idx"
                                          |)
                                        |))
                                    ]
                                  |)
                                |) in
                              let~ _ :=
                                let β :=
                                  M.SubPointer.get_struct_record_field (|
                                    M.read (| self |),
                                    "move_binary_format::file_format::AbilitySetIterator",
                                    "idx"
                                  |) in
                                M.write (|
                                  β,
                                  BinOp.Wrap.shl (|
                                    M.read (| β |),
                                    Value.Integer IntegerKind.I32 1
                                  |)
                                |) in
                              M.match_operator (|
                                M.alloc (| Value.Tuple [] |),
                                [
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ :=
                                        M.use
                                          (M.alloc (|
                                            M.call_closure (|
                                              M.get_associated_function (|
                                                Ty.apply
                                                  (Ty.path "core::option::Option")
                                                  []
                                                  [
                                                    Ty.path
                                                      "move_binary_format::file_format::Ability"
                                                  ],
                                                "is_some",
                                                []
                                              |),
                                              [ next ]
                                            |)
                                          |)) in
                                      let _ :=
                                        M.is_constant_or_break_match (|
                                          M.read (| γ |),
                                          Value.Bool true
                                        |) in
                                      M.alloc (|
                                        M.never_to_any (|
                                          M.read (| M.return_ (| M.read (| next |) |) |)
                                        |)
                                      |)));
                                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                                ]
                              |)));
                          fun γ =>
                            ltac:(M.monadic
                              (M.alloc (|
                                M.never_to_any (|
                                  M.read (|
                                    let~ _ :=
                                      M.alloc (|
                                        M.never_to_any (| M.read (| M.break (||) |) |)
                                      |) in
                                    M.alloc (| Value.Tuple [] |)
                                  |)
                                |)
                              |)))
                        ]
                      |)))
                  |) in
                M.alloc (| Value.StructTuple "core::option::Option::None" [] |)
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::iter::traits::iterator::Iterator"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("Item", InstanceField.Ty _Item); ("next", InstanceField.Method next) ].
  End Impl_core_iter_traits_iterator_Iterator_for_move_binary_format_file_format_AbilitySetIterator.
  
  Module Impl_core_iter_traits_collect_IntoIterator_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (*     type Item = Ability; *)
    Definition _Item : Ty.t := Ty.path "move_binary_format::file_format::Ability".
    
    (*     type IntoIter = AbilitySetIterator; *)
    Definition _IntoIter : Ty.t := Ty.path "move_binary_format::file_format::AbilitySetIterator".
    
    (*
        fn into_iter(self) -> Self::IntoIter {
            AbilitySetIterator {
                idx: 0x1,
                set: self,
            }
        }
    *)
    Definition into_iter (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::AbilitySetIterator"
            [ ("idx", Value.Integer IntegerKind.U8 1); ("set", M.read (| self |)) ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::iter::traits::collect::IntoIterator"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [
          ("Item", InstanceField.Ty _Item);
          ("IntoIter", InstanceField.Ty _IntoIter);
          ("into_iter", InstanceField.Method into_iter)
        ].
  End Impl_core_iter_traits_collect_IntoIterator_for_move_binary_format_file_format_AbilitySet.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_AbilitySet.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::AbilitySet".
    
    (*
        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
            write!(f, "[")?;
            for ability in *self {
                write!(f, "{:?}, ", ability)?;
            }
            write!(f, "]")
        }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.catch_return (|
            ltac:(M.monadic
              (M.read (|
                let~ _ :=
                  M.match_operator (|
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::ops::try_trait::Try",
                          Ty.apply
                            (Ty.path "core::result::Result")
                            []
                            [ Ty.tuple []; Ty.path "core::fmt::Error" ],
                          [],
                          "branch",
                          []
                        |),
                        [
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Formatter",
                              "write_fmt",
                              []
                            |),
                            [
                              M.read (| f |);
                              M.call_closure (|
                                M.get_associated_function (|
                                  Ty.path "core::fmt::Arguments",
                                  "new_const",
                                  []
                                |),
                                [ M.alloc (| Value.Array [ M.read (| Value.String "[" |) ] |) ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |),
                    [
                      fun γ =>
                        ltac:(M.monadic
                          (let γ0_0 :=
                            M.SubPointer.get_struct_tuple_field (|
                              γ,
                              "core::ops::control_flow::ControlFlow::Break",
                              0
                            |) in
                          let residual := M.copy (| γ0_0 |) in
                          M.alloc (|
                            M.never_to_any (|
                              M.read (|
                                M.return_ (|
                                  M.call_closure (|
                                    M.get_trait_method (|
                                      "core::ops::try_trait::FromResidual",
                                      Ty.apply
                                        (Ty.path "core::result::Result")
                                        []
                                        [ Ty.tuple []; Ty.path "core::fmt::Error" ],
                                      [
                                        Ty.apply
                                          (Ty.path "core::result::Result")
                                          []
                                          [
                                            Ty.path "core::convert::Infallible";
                                            Ty.path "core::fmt::Error"
                                          ]
                                      ],
                                      "from_residual",
                                      []
                                    |),
                                    [ M.read (| residual |) ]
                                  |)
                                |)
                              |)
                            |)
                          |)));
                      fun γ =>
                        ltac:(M.monadic
                          (let γ0_0 :=
                            M.SubPointer.get_struct_tuple_field (|
                              γ,
                              "core::ops::control_flow::ControlFlow::Continue",
                              0
                            |) in
                          let val := M.copy (| γ0_0 |) in
                          val))
                    ]
                  |) in
                let~ _ :=
                  M.use
                    (M.match_operator (|
                      M.alloc (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "core::iter::traits::collect::IntoIterator",
                            Ty.path "move_binary_format::file_format::AbilitySet",
                            [],
                            "into_iter",
                            []
                          |),
                          [ M.read (| M.read (| self |) |) ]
                        |)
                      |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let iter := M.copy (| γ |) in
                            M.loop (|
                              ltac:(M.monadic
                                (let~ _ :=
                                  M.match_operator (|
                                    M.alloc (|
                                      M.call_closure (|
                                        M.get_trait_method (|
                                          "core::iter::traits::iterator::Iterator",
                                          Ty.path
                                            "move_binary_format::file_format::AbilitySetIterator",
                                          [],
                                          "next",
                                          []
                                        |),
                                        [ iter ]
                                      |)
                                    |),
                                    [
                                      fun γ =>
                                        ltac:(M.monadic
                                          (let _ :=
                                            M.is_struct_tuple (|
                                              γ,
                                              "core::option::Option::None"
                                            |) in
                                          M.alloc (|
                                            M.never_to_any (| M.read (| M.break (||) |) |)
                                          |)));
                                      fun γ =>
                                        ltac:(M.monadic
                                          (let γ0_0 :=
                                            M.SubPointer.get_struct_tuple_field (|
                                              γ,
                                              "core::option::Option::Some",
                                              0
                                            |) in
                                          let ability := M.copy (| γ0_0 |) in
                                          let~ _ :=
                                            M.match_operator (|
                                              M.alloc (|
                                                M.call_closure (|
                                                  M.get_trait_method (|
                                                    "core::ops::try_trait::Try",
                                                    Ty.apply
                                                      (Ty.path "core::result::Result")
                                                      []
                                                      [ Ty.tuple []; Ty.path "core::fmt::Error" ],
                                                    [],
                                                    "branch",
                                                    []
                                                  |),
                                                  [
                                                    M.call_closure (|
                                                      M.get_associated_function (|
                                                        Ty.path "core::fmt::Formatter",
                                                        "write_fmt",
                                                        []
                                                      |),
                                                      [
                                                        M.read (| f |);
                                                        M.call_closure (|
                                                          M.get_associated_function (|
                                                            Ty.path "core::fmt::Arguments",
                                                            "new_v1",
                                                            []
                                                          |),
                                                          [
                                                            M.alloc (|
                                                              Value.Array
                                                                [
                                                                  M.read (| Value.String "" |);
                                                                  M.read (| Value.String ", " |)
                                                                ]
                                                            |);
                                                            M.alloc (|
                                                              Value.Array
                                                                [
                                                                  M.call_closure (|
                                                                    M.get_associated_function (|
                                                                      Ty.path
                                                                        "core::fmt::rt::Argument",
                                                                      "new_debug",
                                                                      [
                                                                        Ty.path
                                                                          "move_binary_format::file_format::Ability"
                                                                      ]
                                                                    |),
                                                                    [ ability ]
                                                                  |)
                                                                ]
                                                            |)
                                                          ]
                                                        |)
                                                      ]
                                                    |)
                                                  ]
                                                |)
                                              |),
                                              [
                                                fun γ =>
                                                  ltac:(M.monadic
                                                    (let γ0_0 :=
                                                      M.SubPointer.get_struct_tuple_field (|
                                                        γ,
                                                        "core::ops::control_flow::ControlFlow::Break",
                                                        0
                                                      |) in
                                                    let residual := M.copy (| γ0_0 |) in
                                                    M.alloc (|
                                                      M.never_to_any (|
                                                        M.read (|
                                                          M.return_ (|
                                                            M.call_closure (|
                                                              M.get_trait_method (|
                                                                "core::ops::try_trait::FromResidual",
                                                                Ty.apply
                                                                  (Ty.path "core::result::Result")
                                                                  []
                                                                  [
                                                                    Ty.tuple [];
                                                                    Ty.path "core::fmt::Error"
                                                                  ],
                                                                [
                                                                  Ty.apply
                                                                    (Ty.path "core::result::Result")
                                                                    []
                                                                    [
                                                                      Ty.path
                                                                        "core::convert::Infallible";
                                                                      Ty.path "core::fmt::Error"
                                                                    ]
                                                                ],
                                                                "from_residual",
                                                                []
                                                              |),
                                                              [ M.read (| residual |) ]
                                                            |)
                                                          |)
                                                        |)
                                                      |)
                                                    |)));
                                                fun γ =>
                                                  ltac:(M.monadic
                                                    (let γ0_0 :=
                                                      M.SubPointer.get_struct_tuple_field (|
                                                        γ,
                                                        "core::ops::control_flow::ControlFlow::Continue",
                                                        0
                                                      |) in
                                                    let val := M.copy (| γ0_0 |) in
                                                    val))
                                              ]
                                            |) in
                                          M.alloc (| Value.Tuple [] |)))
                                    ]
                                  |) in
                                M.alloc (| Value.Tuple [] |)))
                            |)))
                      ]
                    |)) in
                M.alloc (|
                  M.call_closure (|
                    M.get_associated_function (| Ty.path "core::fmt::Formatter", "write_fmt", [] |),
                    [
                      M.read (| f |);
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Arguments",
                          "new_const",
                          []
                        |),
                        [ M.alloc (| Value.Array [ M.read (| Value.String "]" |) ] |) ]
                      |)
                    ]
                  |)
                |)
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_AbilitySet.
  
  (*
  Enum SignatureToken
  {
    const_params := [];
    ty_params := [];
    variants :=
      [
        {
          name := "Bool";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "U8";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "U64";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "U128";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Address";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Signer";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Vector";
          item :=
            StructTuple
              [
                Ty.apply
                  (Ty.path "alloc::boxed::Box")
                  []
                  [
                    Ty.path "move_binary_format::file_format::SignatureToken";
                    Ty.path "alloc::alloc::Global"
                  ]
              ];
          discriminant := None;
        };
        {
          name := "Struct";
          item := StructTuple [ Ty.path "move_binary_format::file_format::StructHandleIndex" ];
          discriminant := None;
        };
        {
          name := "StructInstantiation";
          item :=
            StructTuple
              [
                Ty.apply
                  (Ty.path "alloc::boxed::Box")
                  []
                  [
                    Ty.tuple
                      [
                        Ty.path "move_binary_format::file_format::StructHandleIndex";
                        Ty.apply
                          (Ty.path "alloc::vec::Vec")
                          []
                          [
                            Ty.path "move_binary_format::file_format::SignatureToken";
                            Ty.path "alloc::alloc::Global"
                          ]
                      ];
                    Ty.path "alloc::alloc::Global"
                  ]
              ];
          discriminant := None;
        };
        {
          name := "Reference";
          item :=
            StructTuple
              [
                Ty.apply
                  (Ty.path "alloc::boxed::Box")
                  []
                  [
                    Ty.path "move_binary_format::file_format::SignatureToken";
                    Ty.path "alloc::alloc::Global"
                  ]
              ];
          discriminant := None;
        };
        {
          name := "MutableReference";
          item :=
            StructTuple
              [
                Ty.apply
                  (Ty.path "alloc::boxed::Box")
                  []
                  [
                    Ty.path "move_binary_format::file_format::SignatureToken";
                    Ty.path "alloc::alloc::Global"
                  ]
              ];
          discriminant := None;
        };
        {
          name := "TypeParameter";
          item := StructTuple [ Ty.path "u16" ];
          discriminant := None;
        };
        {
          name := "U16";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "U32";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "U256";
          item := StructTuple [];
          discriminant := None;
        }
      ];
  }
  *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_SignatureToken.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureToken".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Bool"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::SignatureToken::Bool" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U8"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::SignatureToken::U8" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U64"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::SignatureToken::U64" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U128"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::SignatureToken::U128" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Address"
                      |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::SignatureToken::Address"
                        []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Signer"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::SignatureToken::Signer" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Vector",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::SignatureToken::Vector"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.apply
                                (Ty.path "alloc::boxed::Box")
                                []
                                [
                                  Ty.path "move_binary_format::file_format::SignatureToken";
                                  Ty.path "alloc::alloc::Global"
                                ],
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Struct",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::SignatureToken::Struct"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::StructHandleIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::StructInstantiation",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::SignatureToken::StructInstantiation"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.apply
                                (Ty.path "alloc::boxed::Box")
                                []
                                [
                                  Ty.tuple
                                    [
                                      Ty.path "move_binary_format::file_format::StructHandleIndex";
                                      Ty.apply
                                        (Ty.path "alloc::vec::Vec")
                                        []
                                        [
                                          Ty.path "move_binary_format::file_format::SignatureToken";
                                          Ty.path "alloc::alloc::Global"
                                        ]
                                    ];
                                  Ty.path "alloc::alloc::Global"
                                ],
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Reference",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::SignatureToken::Reference"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.apply
                                (Ty.path "alloc::boxed::Box")
                                []
                                [
                                  Ty.path "move_binary_format::file_format::SignatureToken";
                                  Ty.path "alloc::alloc::Global"
                                ],
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::MutableReference",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::SignatureToken::MutableReference"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.apply
                                (Ty.path "alloc::boxed::Box")
                                []
                                [
                                  Ty.path "move_binary_format::file_format::SignatureToken";
                                  Ty.path "alloc::alloc::Global"
                                ],
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::TypeParameter",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::SignatureToken::TypeParameter"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u16",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U16"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::SignatureToken::U16" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U32"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::SignatureToken::U32" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U256"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::SignatureToken::U256" []
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_SignatureToken.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_SignatureToken.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureToken".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (M.match_operator (|
                              Value.DeclaredButUndefined,
                              [
                                fun γ =>
                                  ltac:(M.monadic
                                    (M.match_operator (|
                                      Value.DeclaredButUndefined,
                                      [
                                        fun γ =>
                                          ltac:(M.monadic
                                            (M.match_operator (|
                                              Value.DeclaredButUndefined,
                                              [
                                                fun γ =>
                                                  ltac:(M.monadic
                                                    (M.match_operator (|
                                                      Value.DeclaredButUndefined,
                                                      [
                                                        fun γ =>
                                                          ltac:(M.monadic
                                                            (M.alloc (| Value.Tuple [] |)))
                                                      ]
                                                    |)))
                                              ]
                                            |)))
                                      ]
                                    |)))
                              ]
                            |)))
                      ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_SignatureToken.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_SignatureToken.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureToken".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::SignatureToken" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (| "core::hash::Hash", Ty.path "isize", [], "hash", [ __H ] |),
                  [ __self_discr; M.read (| state |) ]
                |)
              |) in
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Vector",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [
                              Ty.path "move_binary_format::file_format::SignatureToken";
                              Ty.path "alloc::alloc::Global"
                            ],
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Struct",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructHandleIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::StructInstantiation",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [
                              Ty.tuple
                                [
                                  Ty.path "move_binary_format::file_format::StructHandleIndex";
                                  Ty.apply
                                    (Ty.path "alloc::vec::Vec")
                                    []
                                    [
                                      Ty.path "move_binary_format::file_format::SignatureToken";
                                      Ty.path "alloc::alloc::Global"
                                    ]
                                ];
                              Ty.path "alloc::alloc::Global"
                            ],
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Reference",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [
                              Ty.path "move_binary_format::file_format::SignatureToken";
                              Ty.path "alloc::alloc::Global"
                            ],
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::MutableReference",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [
                              Ty.path "move_binary_format::file_format::SignatureToken";
                              Ty.path "alloc::alloc::Global"
                            ],
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::TypeParameter",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u16",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_SignatureToken.
  
  Module Impl_core_cmp_Ord_for_move_binary_format_file_format_SignatureToken.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureToken".
    
    (* Ord *)
    Definition cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::SignatureToken" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::SignatureToken" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.match_operator (|
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (| "core::cmp::Ord", Ty.path "isize", [], "cmp", [] |),
                  [ __self_discr; __arg1_discr ]
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let _ := M.is_struct_tuple (| γ, "core::cmp::Ordering::Equal" |) in
                    M.match_operator (|
                      M.alloc (| Value.Tuple [ M.read (| self |); M.read (| other |) ] |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::Vector",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::Vector",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::Ord",
                                  Ty.apply
                                    (Ty.path "alloc::boxed::Box")
                                    []
                                    [
                                      Ty.path "move_binary_format::file_format::SignatureToken";
                                      Ty.path "alloc::alloc::Global"
                                    ],
                                  [],
                                  "cmp",
                                  []
                                |),
                                [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::Struct",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::Struct",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::Ord",
                                  Ty.path "move_binary_format::file_format::StructHandleIndex",
                                  [],
                                  "cmp",
                                  []
                                |),
                                [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::StructInstantiation",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::StructInstantiation",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::Ord",
                                  Ty.apply
                                    (Ty.path "alloc::boxed::Box")
                                    []
                                    [
                                      Ty.tuple
                                        [
                                          Ty.path
                                            "move_binary_format::file_format::StructHandleIndex";
                                          Ty.apply
                                            (Ty.path "alloc::vec::Vec")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::SignatureToken";
                                              Ty.path "alloc::alloc::Global"
                                            ]
                                        ];
                                      Ty.path "alloc::alloc::Global"
                                    ],
                                  [],
                                  "cmp",
                                  []
                                |),
                                [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::Reference",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::Reference",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::Ord",
                                  Ty.apply
                                    (Ty.path "alloc::boxed::Box")
                                    []
                                    [
                                      Ty.path "move_binary_format::file_format::SignatureToken";
                                      Ty.path "alloc::alloc::Global"
                                    ],
                                  [],
                                  "cmp",
                                  []
                                |),
                                [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::MutableReference",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::MutableReference",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::Ord",
                                  Ty.apply
                                    (Ty.path "alloc::boxed::Box")
                                    []
                                    [
                                      Ty.path "move_binary_format::file_format::SignatureToken";
                                      Ty.path "alloc::alloc::Global"
                                    ],
                                  [],
                                  "cmp",
                                  []
                                |),
                                [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::TypeParameter",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::TypeParameter",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::Ord",
                                  Ty.path "u16",
                                  [],
                                  "cmp",
                                  []
                                |),
                                [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (M.alloc (| Value.StructTuple "core::cmp::Ordering::Equal" [] |)))
                      ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let cmp := M.copy (| γ |) in
                    cmp))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Ord"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("cmp", InstanceField.Method cmp) ].
  End Impl_core_cmp_Ord_for_move_binary_format_file_format_SignatureToken.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_SignatureToken.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureToken".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_SignatureToken.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_SignatureToken.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureToken".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::SignatureToken" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::SignatureToken" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.alloc (|
              LogicalOp.and (|
                BinOp.eq (| M.read (| __self_discr |), M.read (| __arg1_discr |) |),
                ltac:(M.monadic
                  (M.read (|
                    M.match_operator (|
                      M.alloc (| Value.Tuple [ M.read (| self |); M.read (| other |) ] |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::Vector",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::Vector",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.apply
                                        (Ty.path "alloc::boxed::Box")
                                        []
                                        [
                                          Ty.path "move_binary_format::file_format::SignatureToken";
                                          Ty.path "alloc::alloc::Global"
                                        ]
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.apply
                                          (Ty.path "alloc::boxed::Box")
                                          []
                                          [
                                            Ty.path
                                              "move_binary_format::file_format::SignatureToken";
                                            Ty.path "alloc::alloc::Global"
                                          ]
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::Struct",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::Struct",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::StructHandleIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::StructHandleIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::StructInstantiation",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::StructInstantiation",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.apply
                                        (Ty.path "alloc::boxed::Box")
                                        []
                                        [
                                          Ty.tuple
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructHandleIndex";
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::SignatureToken";
                                                  Ty.path "alloc::alloc::Global"
                                                ]
                                            ];
                                          Ty.path "alloc::alloc::Global"
                                        ]
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.apply
                                          (Ty.path "alloc::boxed::Box")
                                          []
                                          [
                                            Ty.tuple
                                              [
                                                Ty.path
                                                  "move_binary_format::file_format::StructHandleIndex";
                                                Ty.apply
                                                  (Ty.path "alloc::vec::Vec")
                                                  []
                                                  [
                                                    Ty.path
                                                      "move_binary_format::file_format::SignatureToken";
                                                    Ty.path "alloc::alloc::Global"
                                                  ]
                                              ];
                                            Ty.path "alloc::alloc::Global"
                                          ]
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::Reference",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::Reference",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.apply
                                        (Ty.path "alloc::boxed::Box")
                                        []
                                        [
                                          Ty.path "move_binary_format::file_format::SignatureToken";
                                          Ty.path "alloc::alloc::Global"
                                        ]
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.apply
                                          (Ty.path "alloc::boxed::Box")
                                          []
                                          [
                                            Ty.path
                                              "move_binary_format::file_format::SignatureToken";
                                            Ty.path "alloc::alloc::Global"
                                          ]
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::MutableReference",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::MutableReference",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.apply
                                        (Ty.path "alloc::boxed::Box")
                                        []
                                        [
                                          Ty.path "move_binary_format::file_format::SignatureToken";
                                          Ty.path "alloc::alloc::Global"
                                        ]
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.apply
                                          (Ty.path "alloc::boxed::Box")
                                          []
                                          [
                                            Ty.path
                                              "move_binary_format::file_format::SignatureToken";
                                            Ty.path "alloc::alloc::Global"
                                          ]
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::SignatureToken::TypeParameter",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::SignatureToken::TypeParameter",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u16" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ => ltac:(M.monadic (M.alloc (| Value.Bool true |)))
                      ]
                    |)
                  |)))
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_SignatureToken.
  
  Module Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_SignatureToken.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureToken".
    
    (* PartialOrd *)
    Definition partial_cmp (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::SignatureToken" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::SignatureToken" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.match_operator (|
              M.alloc (| Value.Tuple [ M.read (| self |); M.read (| other |) ] |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                    let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                    let γ0_0 := M.read (| γ0_0 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_0,
                        "move_binary_format::file_format::SignatureToken::Vector",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ2_0 |) in
                    let γ0_1 := M.read (| γ0_1 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_1,
                        "move_binary_format::file_format::SignatureToken::Vector",
                        0
                      |) in
                    let __arg1_0 := M.alloc (| γ2_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::PartialOrd",
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [
                              Ty.path "move_binary_format::file_format::SignatureToken";
                              Ty.path "alloc::alloc::Global"
                            ],
                          [
                            Ty.apply
                              (Ty.path "alloc::boxed::Box")
                              []
                              [
                                Ty.path "move_binary_format::file_format::SignatureToken";
                                Ty.path "alloc::alloc::Global"
                              ]
                          ],
                          "partial_cmp",
                          []
                        |),
                        [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                    let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                    let γ0_0 := M.read (| γ0_0 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_0,
                        "move_binary_format::file_format::SignatureToken::Struct",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ2_0 |) in
                    let γ0_1 := M.read (| γ0_1 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_1,
                        "move_binary_format::file_format::SignatureToken::Struct",
                        0
                      |) in
                    let __arg1_0 := M.alloc (| γ2_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::PartialOrd",
                          Ty.path "move_binary_format::file_format::StructHandleIndex",
                          [ Ty.path "move_binary_format::file_format::StructHandleIndex" ],
                          "partial_cmp",
                          []
                        |),
                        [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                    let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                    let γ0_0 := M.read (| γ0_0 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_0,
                        "move_binary_format::file_format::SignatureToken::StructInstantiation",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ2_0 |) in
                    let γ0_1 := M.read (| γ0_1 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_1,
                        "move_binary_format::file_format::SignatureToken::StructInstantiation",
                        0
                      |) in
                    let __arg1_0 := M.alloc (| γ2_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::PartialOrd",
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [
                              Ty.tuple
                                [
                                  Ty.path "move_binary_format::file_format::StructHandleIndex";
                                  Ty.apply
                                    (Ty.path "alloc::vec::Vec")
                                    []
                                    [
                                      Ty.path "move_binary_format::file_format::SignatureToken";
                                      Ty.path "alloc::alloc::Global"
                                    ]
                                ];
                              Ty.path "alloc::alloc::Global"
                            ],
                          [
                            Ty.apply
                              (Ty.path "alloc::boxed::Box")
                              []
                              [
                                Ty.tuple
                                  [
                                    Ty.path "move_binary_format::file_format::StructHandleIndex";
                                    Ty.apply
                                      (Ty.path "alloc::vec::Vec")
                                      []
                                      [
                                        Ty.path "move_binary_format::file_format::SignatureToken";
                                        Ty.path "alloc::alloc::Global"
                                      ]
                                  ];
                                Ty.path "alloc::alloc::Global"
                              ]
                          ],
                          "partial_cmp",
                          []
                        |),
                        [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                    let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                    let γ0_0 := M.read (| γ0_0 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_0,
                        "move_binary_format::file_format::SignatureToken::Reference",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ2_0 |) in
                    let γ0_1 := M.read (| γ0_1 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_1,
                        "move_binary_format::file_format::SignatureToken::Reference",
                        0
                      |) in
                    let __arg1_0 := M.alloc (| γ2_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::PartialOrd",
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [
                              Ty.path "move_binary_format::file_format::SignatureToken";
                              Ty.path "alloc::alloc::Global"
                            ],
                          [
                            Ty.apply
                              (Ty.path "alloc::boxed::Box")
                              []
                              [
                                Ty.path "move_binary_format::file_format::SignatureToken";
                                Ty.path "alloc::alloc::Global"
                              ]
                          ],
                          "partial_cmp",
                          []
                        |),
                        [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                    let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                    let γ0_0 := M.read (| γ0_0 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_0,
                        "move_binary_format::file_format::SignatureToken::MutableReference",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ2_0 |) in
                    let γ0_1 := M.read (| γ0_1 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_1,
                        "move_binary_format::file_format::SignatureToken::MutableReference",
                        0
                      |) in
                    let __arg1_0 := M.alloc (| γ2_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::PartialOrd",
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [
                              Ty.path "move_binary_format::file_format::SignatureToken";
                              Ty.path "alloc::alloc::Global"
                            ],
                          [
                            Ty.apply
                              (Ty.path "alloc::boxed::Box")
                              []
                              [
                                Ty.path "move_binary_format::file_format::SignatureToken";
                                Ty.path "alloc::alloc::Global"
                              ]
                          ],
                          "partial_cmp",
                          []
                        |),
                        [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                    let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                    let γ0_0 := M.read (| γ0_0 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_0,
                        "move_binary_format::file_format::SignatureToken::TypeParameter",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ2_0 |) in
                    let γ0_1 := M.read (| γ0_1 |) in
                    let γ2_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ0_1,
                        "move_binary_format::file_format::SignatureToken::TypeParameter",
                        0
                      |) in
                    let __arg1_0 := M.alloc (| γ2_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::PartialOrd",
                          Ty.path "u16",
                          [ Ty.path "u16" ],
                          "partial_cmp",
                          []
                        |),
                        [ M.read (| __self_0 |); M.read (| __arg1_0 |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::PartialOrd",
                          Ty.path "isize",
                          [ Ty.path "isize" ],
                          "partial_cmp",
                          []
                        |),
                        [ __self_discr; __arg1_discr ]
                      |)
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialOrd"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("partial_cmp", InstanceField.Method partial_cmp) ].
  End Impl_core_cmp_PartialOrd_for_move_binary_format_file_format_SignatureToken.
  
  (* StructRecord
    {
      name := "SignatureTokenPreorderTraversalIter";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("stack",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.apply
                  (Ty.path "&")
                  []
                  [ Ty.path "move_binary_format::file_format::SignatureToken" ];
                Ty.path "alloc::alloc::Global"
              ])
        ];
    } *)
  
  Module Impl_core_iter_traits_iterator_Iterator_for_move_binary_format_file_format_SignatureTokenPreorderTraversalIter.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::SignatureTokenPreorderTraversalIter".
    
    (*     type Item = &'a SignatureToken; *)
    Definition _Item : Ty.t :=
      Ty.apply (Ty.path "&") [] [ Ty.path "move_binary_format::file_format::SignatureToken" ].
    
    (*
        fn next(&mut self) -> Option<Self::Item> {
            use SignatureToken::*;
    
            match self.stack.pop() {
                Some(tok) => {
                    match tok {
                        Reference(inner_tok) | MutableReference(inner_tok) | Vector(inner_tok) => {
                            self.stack.push(inner_tok)
                        }
    
                        StructInstantiation(struct_inst) => {
                            let (_, inner_toks) = &**struct_inst;
                            self.stack.extend(inner_toks.iter().rev())
                        }
    
                        Signer | Bool | Address | U8 | U16 | U32 | U64 | U128 | U256 | Struct(_)
                        | TypeParameter(_) => (),
                    }
                    Some(tok)
                }
                None => None,
            }
        }
    *)
    Definition next (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.apply
                          (Ty.path "&")
                          []
                          [ Ty.path "move_binary_format::file_format::SignatureToken" ];
                        Ty.path "alloc::alloc::Global"
                      ],
                    "pop",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::SignatureTokenPreorderTraversalIter",
                      "stack"
                    |)
                  ]
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "core::option::Option::Some",
                        0
                      |) in
                    let tok := M.copy (| γ0_0 |) in
                    let~ _ :=
                      M.match_operator (|
                        tok,
                        [
                          fun γ =>
                            ltac:(M.monadic
                              (M.find_or_pattern (|
                                γ,
                                [
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 :=
                                        M.SubPointer.get_struct_tuple_field (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Reference",
                                          0
                                        |) in
                                      let inner_tok := M.alloc (| γ1_0 |) in
                                      Value.Tuple [ inner_tok ]));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 :=
                                        M.SubPointer.get_struct_tuple_field (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::MutableReference",
                                          0
                                        |) in
                                      let inner_tok := M.alloc (| γ1_0 |) in
                                      Value.Tuple [ inner_tok ]));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 :=
                                        M.SubPointer.get_struct_tuple_field (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Vector",
                                          0
                                        |) in
                                      let inner_tok := M.alloc (| γ1_0 |) in
                                      Value.Tuple [ inner_tok ]))
                                ],
                                M.closure
                                  (fun γ =>
                                    ltac:(M.monadic
                                      match γ with
                                      | [ inner_tok ] =>
                                        ltac:(M.monadic
                                          (M.alloc (|
                                            M.call_closure (|
                                              M.get_associated_function (|
                                                Ty.apply
                                                  (Ty.path "alloc::vec::Vec")
                                                  []
                                                  [
                                                    Ty.apply
                                                      (Ty.path "&")
                                                      []
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::SignatureToken"
                                                      ];
                                                    Ty.path "alloc::alloc::Global"
                                                  ],
                                                "push",
                                                []
                                              |),
                                              [
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| self |),
                                                  "move_binary_format::file_format::SignatureTokenPreorderTraversalIter",
                                                  "stack"
                                                |);
                                                M.read (| M.read (| inner_tok |) |)
                                              ]
                                            |)
                                          |)))
                                      | _ => M.impossible "wrong number of arguments"
                                      end))
                              |)));
                          fun γ =>
                            ltac:(M.monadic
                              (let γ := M.read (| γ |) in
                              let γ1_0 :=
                                M.SubPointer.get_struct_tuple_field (|
                                  γ,
                                  "move_binary_format::file_format::SignatureToken::StructInstantiation",
                                  0
                                |) in
                              let struct_inst := M.alloc (| γ1_0 |) in
                              M.match_operator (|
                                M.alloc (| M.read (| M.read (| struct_inst |) |) |),
                                [
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                                      let γ1_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                                      let inner_toks := M.alloc (| γ1_1 |) in
                                      M.alloc (|
                                        M.call_closure (|
                                          M.get_trait_method (|
                                            "core::iter::traits::collect::Extend",
                                            Ty.apply
                                              (Ty.path "alloc::vec::Vec")
                                              []
                                              [
                                                Ty.apply
                                                  (Ty.path "&")
                                                  []
                                                  [
                                                    Ty.path
                                                      "move_binary_format::file_format::SignatureToken"
                                                  ];
                                                Ty.path "alloc::alloc::Global"
                                              ],
                                            [
                                              Ty.apply
                                                (Ty.path "&")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::SignatureToken"
                                                ]
                                            ],
                                            "extend",
                                            [
                                              Ty.apply
                                                (Ty.path "core::iter::adapters::rev::Rev")
                                                []
                                                [
                                                  Ty.apply
                                                    (Ty.path "core::slice::iter::Iter")
                                                    []
                                                    [
                                                      Ty.path
                                                        "move_binary_format::file_format::SignatureToken"
                                                    ]
                                                ]
                                            ]
                                          |),
                                          [
                                            M.SubPointer.get_struct_record_field (|
                                              M.read (| self |),
                                              "move_binary_format::file_format::SignatureTokenPreorderTraversalIter",
                                              "stack"
                                            |);
                                            M.call_closure (|
                                              M.get_trait_method (|
                                                "core::iter::traits::iterator::Iterator",
                                                Ty.apply
                                                  (Ty.path "core::slice::iter::Iter")
                                                  []
                                                  [
                                                    Ty.path
                                                      "move_binary_format::file_format::SignatureToken"
                                                  ],
                                                [],
                                                "rev",
                                                []
                                              |),
                                              [
                                                M.call_closure (|
                                                  M.get_associated_function (|
                                                    Ty.apply
                                                      (Ty.path "slice")
                                                      []
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::SignatureToken"
                                                      ],
                                                    "iter",
                                                    []
                                                  |),
                                                  [
                                                    M.call_closure (|
                                                      M.get_trait_method (|
                                                        "core::ops::deref::Deref",
                                                        Ty.apply
                                                          (Ty.path "alloc::vec::Vec")
                                                          []
                                                          [
                                                            Ty.path
                                                              "move_binary_format::file_format::SignatureToken";
                                                            Ty.path "alloc::alloc::Global"
                                                          ],
                                                        [],
                                                        "deref",
                                                        []
                                                      |),
                                                      [ M.read (| inner_toks |) ]
                                                    |)
                                                  ]
                                                |)
                                              ]
                                            |)
                                          ]
                                        |)
                                      |)))
                                ]
                              |)));
                          fun γ =>
                            ltac:(M.monadic
                              (M.find_or_pattern (|
                                γ,
                                [
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Signer"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Bool"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Address"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U8"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U16"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U32"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U64"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U128"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U256"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 :=
                                        M.SubPointer.get_struct_tuple_field (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Struct",
                                          0
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 :=
                                        M.SubPointer.get_struct_tuple_field (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::TypeParameter",
                                          0
                                        |) in
                                      Value.Tuple []))
                                ],
                                M.closure
                                  (fun γ =>
                                    ltac:(M.monadic
                                      match γ with
                                      | [] => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                                      | _ => M.impossible "wrong number of arguments"
                                      end))
                              |)))
                        ]
                      |) in
                    M.alloc (|
                      Value.StructTuple "core::option::Option::Some" [ M.read (| tok |) ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ := M.is_struct_tuple (| γ, "core::option::Option::None" |) in
                    M.alloc (| Value.StructTuple "core::option::Option::None" [] |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::iter::traits::iterator::Iterator"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("Item", InstanceField.Ty _Item); ("next", InstanceField.Method next) ].
  End Impl_core_iter_traits_iterator_Iterator_for_move_binary_format_file_format_SignatureTokenPreorderTraversalIter.
  
  (* StructRecord
    {
      name := "SignatureTokenPreorderTraversalIterWithDepth";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("stack",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.tuple
                  [
                    Ty.apply
                      (Ty.path "&")
                      []
                      [ Ty.path "move_binary_format::file_format::SignatureToken" ];
                    Ty.path "usize"
                  ];
                Ty.path "alloc::alloc::Global"
              ])
        ];
    } *)
  
  Module Impl_core_iter_traits_iterator_Iterator_for_move_binary_format_file_format_SignatureTokenPreorderTraversalIterWithDepth.
    Definition Self : Ty.t :=
      Ty.path "move_binary_format::file_format::SignatureTokenPreorderTraversalIterWithDepth".
    
    (*     type Item = (&'a SignatureToken, usize); *)
    Definition _Item : Ty.t :=
      Ty.tuple
        [
          Ty.apply (Ty.path "&") [] [ Ty.path "move_binary_format::file_format::SignatureToken" ];
          Ty.path "usize"
        ].
    
    (*
        fn next(&mut self) -> Option<Self::Item> {
            use SignatureToken::*;
    
            match self.stack.pop() {
                Some((tok, depth)) => {
                    match tok {
                        Reference(inner_tok) | MutableReference(inner_tok) | Vector(inner_tok) => {
                            self.stack.push((inner_tok, depth + 1))
                        }
    
                        StructInstantiation(struct_inst) => {
                            let (_, inner_toks) = &**struct_inst;
                            self.stack
                                .extend(inner_toks.iter().map(|tok| (tok, depth + 1)).rev())
                        }
    
                        Signer | Bool | Address | U8 | U16 | U32 | U64 | U128 | U256 | Struct(_)
                        | TypeParameter(_) => (),
                    }
                    Some((tok, depth))
                }
                None => None,
            }
        }
    *)
    Definition next (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              M.alloc (|
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.tuple
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [ Ty.path "move_binary_format::file_format::SignatureToken" ];
                            Ty.path "usize"
                          ];
                        Ty.path "alloc::alloc::Global"
                      ],
                    "pop",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::SignatureTokenPreorderTraversalIterWithDepth",
                      "stack"
                    |)
                  ]
                |)
              |),
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "core::option::Option::Some",
                        0
                      |) in
                    let γ1_0 := M.SubPointer.get_tuple_field (| γ0_0, 0 |) in
                    let γ1_1 := M.SubPointer.get_tuple_field (| γ0_0, 1 |) in
                    let tok := M.copy (| γ1_0 |) in
                    let depth := M.copy (| γ1_1 |) in
                    let~ _ :=
                      M.match_operator (|
                        tok,
                        [
                          fun γ =>
                            ltac:(M.monadic
                              (M.find_or_pattern (|
                                γ,
                                [
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 :=
                                        M.SubPointer.get_struct_tuple_field (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Reference",
                                          0
                                        |) in
                                      let inner_tok := M.alloc (| γ1_0 |) in
                                      Value.Tuple [ inner_tok ]));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 :=
                                        M.SubPointer.get_struct_tuple_field (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::MutableReference",
                                          0
                                        |) in
                                      let inner_tok := M.alloc (| γ1_0 |) in
                                      Value.Tuple [ inner_tok ]));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 :=
                                        M.SubPointer.get_struct_tuple_field (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Vector",
                                          0
                                        |) in
                                      let inner_tok := M.alloc (| γ1_0 |) in
                                      Value.Tuple [ inner_tok ]))
                                ],
                                M.closure
                                  (fun γ =>
                                    ltac:(M.monadic
                                      match γ with
                                      | [ inner_tok ] =>
                                        ltac:(M.monadic
                                          (M.alloc (|
                                            M.call_closure (|
                                              M.get_associated_function (|
                                                Ty.apply
                                                  (Ty.path "alloc::vec::Vec")
                                                  []
                                                  [
                                                    Ty.tuple
                                                      [
                                                        Ty.apply
                                                          (Ty.path "&")
                                                          []
                                                          [
                                                            Ty.path
                                                              "move_binary_format::file_format::SignatureToken"
                                                          ];
                                                        Ty.path "usize"
                                                      ];
                                                    Ty.path "alloc::alloc::Global"
                                                  ],
                                                "push",
                                                []
                                              |),
                                              [
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| self |),
                                                  "move_binary_format::file_format::SignatureTokenPreorderTraversalIterWithDepth",
                                                  "stack"
                                                |);
                                                Value.Tuple
                                                  [
                                                    M.read (| M.read (| inner_tok |) |);
                                                    BinOp.Wrap.add (|
                                                      M.read (| depth |),
                                                      Value.Integer IntegerKind.Usize 1
                                                    |)
                                                  ]
                                              ]
                                            |)
                                          |)))
                                      | _ => M.impossible "wrong number of arguments"
                                      end))
                              |)));
                          fun γ =>
                            ltac:(M.monadic
                              (let γ := M.read (| γ |) in
                              let γ1_0 :=
                                M.SubPointer.get_struct_tuple_field (|
                                  γ,
                                  "move_binary_format::file_format::SignatureToken::StructInstantiation",
                                  0
                                |) in
                              let struct_inst := M.alloc (| γ1_0 |) in
                              M.match_operator (|
                                M.alloc (| M.read (| M.read (| struct_inst |) |) |),
                                [
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                                      let γ1_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                                      let inner_toks := M.alloc (| γ1_1 |) in
                                      M.alloc (|
                                        M.call_closure (|
                                          M.get_trait_method (|
                                            "core::iter::traits::collect::Extend",
                                            Ty.apply
                                              (Ty.path "alloc::vec::Vec")
                                              []
                                              [
                                                Ty.tuple
                                                  [
                                                    Ty.apply
                                                      (Ty.path "&")
                                                      []
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::SignatureToken"
                                                      ];
                                                    Ty.path "usize"
                                                  ];
                                                Ty.path "alloc::alloc::Global"
                                              ],
                                            [
                                              Ty.tuple
                                                [
                                                  Ty.apply
                                                    (Ty.path "&")
                                                    []
                                                    [
                                                      Ty.path
                                                        "move_binary_format::file_format::SignatureToken"
                                                    ];
                                                  Ty.path "usize"
                                                ]
                                            ],
                                            "extend",
                                            [
                                              Ty.apply
                                                (Ty.path "core::iter::adapters::rev::Rev")
                                                []
                                                [
                                                  Ty.apply
                                                    (Ty.path "core::iter::adapters::map::Map")
                                                    []
                                                    [
                                                      Ty.apply
                                                        (Ty.path "core::slice::iter::Iter")
                                                        []
                                                        [
                                                          Ty.path
                                                            "move_binary_format::file_format::SignatureToken"
                                                        ];
                                                      Ty.function
                                                        [
                                                          Ty.tuple
                                                            [
                                                              Ty.apply
                                                                (Ty.path "&")
                                                                []
                                                                [
                                                                  Ty.path
                                                                    "move_binary_format::file_format::SignatureToken"
                                                                ]
                                                            ]
                                                        ]
                                                        (Ty.tuple
                                                          [
                                                            Ty.apply
                                                              (Ty.path "&")
                                                              []
                                                              [
                                                                Ty.path
                                                                  "move_binary_format::file_format::SignatureToken"
                                                              ];
                                                            Ty.path "usize"
                                                          ])
                                                    ]
                                                ]
                                            ]
                                          |),
                                          [
                                            M.SubPointer.get_struct_record_field (|
                                              M.read (| self |),
                                              "move_binary_format::file_format::SignatureTokenPreorderTraversalIterWithDepth",
                                              "stack"
                                            |);
                                            M.call_closure (|
                                              M.get_trait_method (|
                                                "core::iter::traits::iterator::Iterator",
                                                Ty.apply
                                                  (Ty.path "core::iter::adapters::map::Map")
                                                  []
                                                  [
                                                    Ty.apply
                                                      (Ty.path "core::slice::iter::Iter")
                                                      []
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::SignatureToken"
                                                      ];
                                                    Ty.function
                                                      [
                                                        Ty.tuple
                                                          [
                                                            Ty.apply
                                                              (Ty.path "&")
                                                              []
                                                              [
                                                                Ty.path
                                                                  "move_binary_format::file_format::SignatureToken"
                                                              ]
                                                          ]
                                                      ]
                                                      (Ty.tuple
                                                        [
                                                          Ty.apply
                                                            (Ty.path "&")
                                                            []
                                                            [
                                                              Ty.path
                                                                "move_binary_format::file_format::SignatureToken"
                                                            ];
                                                          Ty.path "usize"
                                                        ])
                                                  ],
                                                [],
                                                "rev",
                                                []
                                              |),
                                              [
                                                M.call_closure (|
                                                  M.get_trait_method (|
                                                    "core::iter::traits::iterator::Iterator",
                                                    Ty.apply
                                                      (Ty.path "core::slice::iter::Iter")
                                                      []
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::SignatureToken"
                                                      ],
                                                    [],
                                                    "map",
                                                    [
                                                      Ty.tuple
                                                        [
                                                          Ty.apply
                                                            (Ty.path "&")
                                                            []
                                                            [
                                                              Ty.path
                                                                "move_binary_format::file_format::SignatureToken"
                                                            ];
                                                          Ty.path "usize"
                                                        ];
                                                      Ty.function
                                                        [
                                                          Ty.tuple
                                                            [
                                                              Ty.apply
                                                                (Ty.path "&")
                                                                []
                                                                [
                                                                  Ty.path
                                                                    "move_binary_format::file_format::SignatureToken"
                                                                ]
                                                            ]
                                                        ]
                                                        (Ty.tuple
                                                          [
                                                            Ty.apply
                                                              (Ty.path "&")
                                                              []
                                                              [
                                                                Ty.path
                                                                  "move_binary_format::file_format::SignatureToken"
                                                              ];
                                                            Ty.path "usize"
                                                          ])
                                                    ]
                                                  |),
                                                  [
                                                    M.call_closure (|
                                                      M.get_associated_function (|
                                                        Ty.apply
                                                          (Ty.path "slice")
                                                          []
                                                          [
                                                            Ty.path
                                                              "move_binary_format::file_format::SignatureToken"
                                                          ],
                                                        "iter",
                                                        []
                                                      |),
                                                      [
                                                        M.call_closure (|
                                                          M.get_trait_method (|
                                                            "core::ops::deref::Deref",
                                                            Ty.apply
                                                              (Ty.path "alloc::vec::Vec")
                                                              []
                                                              [
                                                                Ty.path
                                                                  "move_binary_format::file_format::SignatureToken";
                                                                Ty.path "alloc::alloc::Global"
                                                              ],
                                                            [],
                                                            "deref",
                                                            []
                                                          |),
                                                          [ M.read (| inner_toks |) ]
                                                        |)
                                                      ]
                                                    |);
                                                    M.closure
                                                      (fun γ =>
                                                        ltac:(M.monadic
                                                          match γ with
                                                          | [ α0 ] =>
                                                            ltac:(M.monadic
                                                              (M.match_operator (|
                                                                M.alloc (| α0 |),
                                                                [
                                                                  fun γ =>
                                                                    ltac:(M.monadic
                                                                      (let tok := M.copy (| γ |) in
                                                                      Value.Tuple
                                                                        [
                                                                          M.read (| tok |);
                                                                          BinOp.Wrap.add (|
                                                                            M.read (| depth |),
                                                                            Value.Integer
                                                                              IntegerKind.Usize
                                                                              1
                                                                          |)
                                                                        ]))
                                                                ]
                                                              |)))
                                                          | _ =>
                                                            M.impossible "wrong number of arguments"
                                                          end))
                                                  ]
                                                |)
                                              ]
                                            |)
                                          ]
                                        |)
                                      |)))
                                ]
                              |)));
                          fun γ =>
                            ltac:(M.monadic
                              (M.find_or_pattern (|
                                γ,
                                [
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Signer"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Bool"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Address"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U8"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U16"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U32"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U64"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U128"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let _ :=
                                        M.is_struct_tuple (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::U256"
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 :=
                                        M.SubPointer.get_struct_tuple_field (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::Struct",
                                          0
                                        |) in
                                      Value.Tuple []));
                                  fun γ =>
                                    ltac:(M.monadic
                                      (let γ := M.read (| γ |) in
                                      let γ1_0 :=
                                        M.SubPointer.get_struct_tuple_field (|
                                          γ,
                                          "move_binary_format::file_format::SignatureToken::TypeParameter",
                                          0
                                        |) in
                                      Value.Tuple []))
                                ],
                                M.closure
                                  (fun γ =>
                                    ltac:(M.monadic
                                      match γ with
                                      | [] => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                                      | _ => M.impossible "wrong number of arguments"
                                      end))
                              |)))
                        ]
                      |) in
                    M.alloc (|
                      Value.StructTuple
                        "core::option::Option::Some"
                        [ Value.Tuple [ M.read (| tok |); M.read (| depth |) ] ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ := M.is_struct_tuple (| γ, "core::option::Option::None" |) in
                    M.alloc (| Value.StructTuple "core::option::Option::None" [] |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::iter::traits::iterator::Iterator"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("Item", InstanceField.Ty _Item); ("next", InstanceField.Method next) ].
  End Impl_core_iter_traits_iterator_Iterator_for_move_binary_format_file_format_SignatureTokenPreorderTraversalIterWithDepth.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_SignatureToken.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureToken".
    
    (*
        fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
            match self {
                SignatureToken::Bool => write!(f, "Bool"),
                SignatureToken::U8 => write!(f, "U8"),
                SignatureToken::U16 => write!(f, "U16"),
                SignatureToken::U32 => write!(f, "U32"),
                SignatureToken::U64 => write!(f, "U64"),
                SignatureToken::U128 => write!(f, "U128"),
                SignatureToken::U256 => write!(f, "U256"),
                SignatureToken::Address => write!(f, "Address"),
                SignatureToken::Signer => write!(f, "Signer"),
                SignatureToken::Vector(boxed) => write!(f, "Vector({:?})", boxed),
                SignatureToken::Struct(idx) => write!(f, "Struct({:?})", idx),
                SignatureToken::StructInstantiation(struct_inst) => {
                    let (idx, types) = &**struct_inst;
                    write!(f, "StructInstantiation({:?}, {:?})", idx, types)
                }
                SignatureToken::Reference(boxed) => write!(f, "Reference({:?})", boxed),
                SignatureToken::MutableReference(boxed) => write!(f, "MutableReference({:?})", boxed),
                SignatureToken::TypeParameter(idx) => write!(f, "TypeParameter({:?})", idx),
            }
        }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Bool"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Bool" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U8"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "U8" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U16"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "U16" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U32"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "U32" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U64"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "U64" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U128"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "U128" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::U256"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "U256" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Address"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Address" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Signer"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Signer" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Vector",
                        0
                      |) in
                    let boxed := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "Vector(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.apply
                                                (Ty.path "alloc::boxed::Box")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::SignatureToken";
                                                  Ty.path "alloc::alloc::Global"
                                                ]
                                            ]
                                        ]
                                      |),
                                      [ boxed ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Struct",
                        0
                      |) in
                    let idx := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "Struct(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructHandleIndex"
                                            ]
                                        ]
                                      |),
                                      [ idx ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::StructInstantiation",
                        0
                      |) in
                    let struct_inst := M.alloc (| γ1_0 |) in
                    M.match_operator (|
                      M.alloc (| M.read (| M.read (| struct_inst |) |) |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ1_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let idx := M.alloc (| γ1_0 |) in
                            let types := M.alloc (| γ1_1 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_associated_function (|
                                  Ty.path "core::fmt::Formatter",
                                  "write_fmt",
                                  []
                                |),
                                [
                                  M.read (| f |);
                                  M.call_closure (|
                                    M.get_associated_function (|
                                      Ty.path "core::fmt::Arguments",
                                      "new_v1",
                                      []
                                    |),
                                    [
                                      M.alloc (|
                                        Value.Array
                                          [
                                            M.read (| Value.String "StructInstantiation(" |);
                                            M.read (| Value.String ", " |);
                                            M.read (| Value.String ")" |)
                                          ]
                                      |);
                                      M.alloc (|
                                        Value.Array
                                          [
                                            M.call_closure (|
                                              M.get_associated_function (|
                                                Ty.path "core::fmt::rt::Argument",
                                                "new_debug",
                                                [
                                                  Ty.apply
                                                    (Ty.path "&")
                                                    []
                                                    [
                                                      Ty.path
                                                        "move_binary_format::file_format::StructHandleIndex"
                                                    ]
                                                ]
                                              |),
                                              [ idx ]
                                            |);
                                            M.call_closure (|
                                              M.get_associated_function (|
                                                Ty.path "core::fmt::rt::Argument",
                                                "new_debug",
                                                [
                                                  Ty.apply
                                                    (Ty.path "&")
                                                    []
                                                    [
                                                      Ty.apply
                                                        (Ty.path "alloc::vec::Vec")
                                                        []
                                                        [
                                                          Ty.path
                                                            "move_binary_format::file_format::SignatureToken";
                                                          Ty.path "alloc::alloc::Global"
                                                        ]
                                                    ]
                                                ]
                                              |),
                                              [ types ]
                                            |)
                                          ]
                                      |)
                                    ]
                                  |)
                                ]
                              |)
                            |)))
                      ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Reference",
                        0
                      |) in
                    let boxed := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "Reference(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.apply
                                                (Ty.path "alloc::boxed::Box")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::SignatureToken";
                                                  Ty.path "alloc::alloc::Global"
                                                ]
                                            ]
                                        ]
                                      |),
                                      [ boxed ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::MutableReference",
                        0
                      |) in
                    let boxed := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MutableReference(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.apply
                                                (Ty.path "alloc::boxed::Box")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::SignatureToken";
                                                  Ty.path "alloc::alloc::Global"
                                                ]
                                            ]
                                        ]
                                      |),
                                      [ boxed ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::TypeParameter",
                        0
                      |) in
                    let idx := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "TypeParameter(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
                                      |),
                                      [ idx ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_SignatureToken.
  
  Module Impl_move_binary_format_file_format_SignatureToken.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::SignatureToken".
    
    (*
        pub fn signature_token_kind(&self) -> SignatureTokenKind {
            // TODO: SignatureTokenKind is out-dated. fix/update/remove SignatureTokenKind and see if
            // this function needs to be cleaned up
            use SignatureToken::*;
    
            match self {
                Reference(_) => SignatureTokenKind::Reference,
                MutableReference(_) => SignatureTokenKind::MutableReference,
                Bool
                | U8
                | U16
                | U32
                | U64
                | U128
                | U256
                | Address
                | Signer
                | Struct(_)
                | StructInstantiation(_)
                | Vector(_) => SignatureTokenKind::Value,
                // TODO: This is a temporary hack to please the verifier. SignatureTokenKind will soon
                // be completely removed. `SignatureTokenView::kind()` should be used instead.
                TypeParameter(_) => SignatureTokenKind::Value,
            }
        }
    *)
    Definition signature_token_kind (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Reference",
                        0
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::SignatureTokenKind::Reference" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::MutableReference",
                        0
                      |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::SignatureTokenKind::MutableReference"
                        []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Bool"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U8"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U16"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U32"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U64"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U128"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U256"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Address"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Signer"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Struct",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::StructInstantiation",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Vector",
                                0
                              |) in
                            Value.Tuple []))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [] =>
                              ltac:(M.monadic
                                (M.alloc (|
                                  Value.StructTuple
                                    "move_binary_format::SignatureTokenKind::Value"
                                    []
                                |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::TypeParameter",
                        0
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::SignatureTokenKind::Value" []
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_signature_token_kind :
      M.IsAssociatedFunction Self "signature_token_kind" signature_token_kind.
    
    (*
        pub fn is_integer(&self) -> bool {
            use SignatureToken::*;
            match self {
                U8 | U16 | U32 | U64 | U128 | U256 => true,
                Bool
                | Address
                | Signer
                | Vector(_)
                | Struct(_)
                | StructInstantiation(_)
                | Reference(_)
                | MutableReference(_)
                | TypeParameter(_) => false,
            }
        }
    *)
    Definition is_integer (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U8"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U16"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U32"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U64"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U128"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U256"
                              |) in
                            Value.Tuple []))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [] => ltac:(M.monadic (M.alloc (| Value.Bool true |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Bool"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Address"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Signer"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Vector",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Struct",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::StructInstantiation",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Reference",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::MutableReference",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::TypeParameter",
                                0
                              |) in
                            Value.Tuple []))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [] => ltac:(M.monadic (M.alloc (| Value.Bool false |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_integer : M.IsAssociatedFunction Self "is_integer" is_integer.
    
    (*
        pub fn is_reference(&self) -> bool {
            use SignatureToken::*;
    
            matches!(self, Reference(_) | MutableReference(_))
        }
    *)
    Definition is_reference (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Reference",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::MutableReference",
                                0
                              |) in
                            Value.Tuple []))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [] => ltac:(M.monadic (M.alloc (| Value.Bool true |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)));
                fun γ => ltac:(M.monadic (M.alloc (| Value.Bool false |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_reference : M.IsAssociatedFunction Self "is_reference" is_reference.
    
    (*
        pub fn is_mutable_reference(&self) -> bool {
            use SignatureToken::*;
    
            matches!(self, MutableReference(_))
        }
    *)
    Definition is_mutable_reference (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::MutableReference",
                        0
                      |) in
                    M.alloc (| Value.Bool true |)));
                fun γ => ltac:(M.monadic (M.alloc (| Value.Bool false |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_mutable_reference :
      M.IsAssociatedFunction Self "is_mutable_reference" is_mutable_reference.
    
    (*
        pub fn is_signer(&self) -> bool {
            use SignatureToken::*;
    
            matches!(self, Signer)
        }
    *)
    Definition is_signer (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Signer"
                      |) in
                    M.alloc (| Value.Bool true |)));
                fun γ => ltac:(M.monadic (M.alloc (| Value.Bool false |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_signer : M.IsAssociatedFunction Self "is_signer" is_signer.
    
    (*
        pub fn is_valid_for_constant(&self) -> bool {
            use SignatureToken::*;
    
            match self {
                Bool | U8 | U16 | U32 | U64 | U128 | U256 | Address => true,
                Vector(inner) => inner.is_valid_for_constant(),
                Signer
                | Struct(_)
                | StructInstantiation(_)
                | Reference(_)
                | MutableReference(_)
                | TypeParameter(_) => false,
            }
        }
    *)
    Definition is_valid_for_constant (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Bool"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U8"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U16"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U32"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U64"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U128"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::U256"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Address"
                              |) in
                            Value.Tuple []))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [] => ltac:(M.monadic (M.alloc (| Value.Bool true |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Vector",
                        0
                      |) in
                    let inner := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "move_binary_format::file_format::SignatureToken",
                          "is_valid_for_constant",
                          []
                        |),
                        [ M.read (| M.read (| inner |) |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Signer"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Struct",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::StructInstantiation",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Reference",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::MutableReference",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::TypeParameter",
                                0
                              |) in
                            Value.Tuple []))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [] => ltac:(M.monadic (M.alloc (| Value.Bool false |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_valid_for_constant :
      M.IsAssociatedFunction Self "is_valid_for_constant" is_valid_for_constant.
    
    (*
        pub fn debug_set_sh_idx(&mut self, sh_idx: StructHandleIndex) {
            match self {
                SignatureToken::Struct(ref mut wrapped) => *wrapped = sh_idx,
                SignatureToken::StructInstantiation(ref mut struct_inst) => {
                    Box::as_mut(struct_inst).0 = sh_idx
                }
                SignatureToken::Reference(ref mut token)
                | SignatureToken::MutableReference(ref mut token) => token.debug_set_sh_idx(sh_idx),
                other => panic!(
                    "debug_set_sh_idx (to {}) called for non-struct token {:?}",
                    sh_idx, other
                ),
            }
        }
    *)
    Definition debug_set_sh_idx (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; sh_idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let sh_idx := M.alloc (| sh_idx |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::Struct",
                        0
                      |) in
                    let wrapped := M.alloc (| γ1_0 |) in
                    M.write (| M.read (| wrapped |), M.read (| sh_idx |) |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::SignatureToken::StructInstantiation",
                        0
                      |) in
                    let struct_inst := M.alloc (| γ1_0 |) in
                    M.write (|
                      M.SubPointer.get_tuple_field (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "core::convert::AsMut",
                            Ty.apply
                              (Ty.path "alloc::boxed::Box")
                              []
                              [
                                Ty.tuple
                                  [
                                    Ty.path "move_binary_format::file_format::StructHandleIndex";
                                    Ty.apply
                                      (Ty.path "alloc::vec::Vec")
                                      []
                                      [
                                        Ty.path "move_binary_format::file_format::SignatureToken";
                                        Ty.path "alloc::alloc::Global"
                                      ]
                                  ];
                                Ty.path "alloc::alloc::Global"
                              ],
                            [
                              Ty.tuple
                                [
                                  Ty.path "move_binary_format::file_format::StructHandleIndex";
                                  Ty.apply
                                    (Ty.path "alloc::vec::Vec")
                                    []
                                    [
                                      Ty.path "move_binary_format::file_format::SignatureToken";
                                      Ty.path "alloc::alloc::Global"
                                    ]
                                ]
                            ],
                            "as_mut",
                            []
                          |),
                          [ M.read (| struct_inst |) ]
                        |),
                        0
                      |),
                      M.read (| sh_idx |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::Reference",
                                0
                              |) in
                            let token := M.alloc (| γ1_0 |) in
                            Value.Tuple [ token ]));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::SignatureToken::MutableReference",
                                0
                              |) in
                            let token := M.alloc (| γ1_0 |) in
                            Value.Tuple [ token ]))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [ token ] =>
                              ltac:(M.monadic
                                (M.alloc (|
                                  M.call_closure (|
                                    M.get_associated_function (|
                                      Ty.path "move_binary_format::file_format::SignatureToken",
                                      "debug_set_sh_idx",
                                      []
                                    |),
                                    [ M.read (| M.read (| token |) |); M.read (| sh_idx |) ]
                                  |)
                                |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let other := M.copy (| γ |) in
                    M.alloc (|
                      M.never_to_any (|
                        M.call_closure (|
                          M.get_function (| "core::panicking::panic_fmt", [] |),
                          [
                            M.call_closure (|
                              M.get_associated_function (|
                                Ty.path "core::fmt::Arguments",
                                "new_v1",
                                []
                              |),
                              [
                                M.alloc (|
                                  Value.Array
                                    [
                                      M.read (| Value.String "debug_set_sh_idx (to " |);
                                      M.read (| Value.String ") called for non-struct token " |)
                                    ]
                                |);
                                M.alloc (|
                                  Value.Array
                                    [
                                      M.call_closure (|
                                        M.get_associated_function (|
                                          Ty.path "core::fmt::rt::Argument",
                                          "new_display",
                                          [
                                            Ty.path
                                              "move_binary_format::file_format::StructHandleIndex"
                                          ]
                                        |),
                                        [ sh_idx ]
                                      |);
                                      M.call_closure (|
                                        M.get_associated_function (|
                                          Ty.path "core::fmt::rt::Argument",
                                          "new_debug",
                                          [
                                            Ty.apply
                                              (Ty.path "&mut")
                                              []
                                              [
                                                Ty.path
                                                  "move_binary_format::file_format::SignatureToken"
                                              ]
                                          ]
                                        |),
                                        [ other ]
                                      |)
                                    ]
                                |)
                              ]
                            |)
                          ]
                        |)
                      |)
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_debug_set_sh_idx :
      M.IsAssociatedFunction Self "debug_set_sh_idx" debug_set_sh_idx.
    
    (*
        pub fn preorder_traversal(&self) -> SignatureTokenPreorderTraversalIter<'_> {
            SignatureTokenPreorderTraversalIter { stack: vec![self] }
        }
    *)
    Definition preorder_traversal (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::SignatureTokenPreorderTraversalIter"
            [
              ("stack",
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.apply
                      (Ty.path "slice")
                      []
                      [
                        Ty.apply
                          (Ty.path "&")
                          []
                          [ Ty.path "move_binary_format::file_format::SignatureToken" ]
                      ],
                    "into_vec",
                    [ Ty.path "alloc::alloc::Global" ]
                  |),
                  [
                    M.read (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [
                              Ty.apply
                                (Ty.path "array")
                                [ Value.Integer IntegerKind.Usize 1 ]
                                [
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::SignatureToken" ]
                                ];
                              Ty.path "alloc::alloc::Global"
                            ],
                          "new",
                          []
                        |),
                        [ M.alloc (| Value.Array [ M.read (| self |) ] |) ]
                      |)
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_preorder_traversal :
      M.IsAssociatedFunction Self "preorder_traversal" preorder_traversal.
    
    (*
        pub fn preorder_traversal_with_depth(
            &self,
        ) -> SignatureTokenPreorderTraversalIterWithDepth<'_> {
            SignatureTokenPreorderTraversalIterWithDepth {
                stack: vec![(self, 1)],
            }
        }
    *)
    Definition preorder_traversal_with_depth
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::SignatureTokenPreorderTraversalIterWithDepth"
            [
              ("stack",
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.apply
                      (Ty.path "slice")
                      []
                      [
                        Ty.tuple
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [ Ty.path "move_binary_format::file_format::SignatureToken" ];
                            Ty.path "usize"
                          ]
                      ],
                    "into_vec",
                    [ Ty.path "alloc::alloc::Global" ]
                  |),
                  [
                    M.read (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [
                              Ty.apply
                                (Ty.path "array")
                                [ Value.Integer IntegerKind.Usize 1 ]
                                [
                                  Ty.tuple
                                    [
                                      Ty.apply
                                        (Ty.path "&")
                                        []
                                        [ Ty.path "move_binary_format::file_format::SignatureToken"
                                        ];
                                      Ty.path "usize"
                                    ]
                                ];
                              Ty.path "alloc::alloc::Global"
                            ],
                          "new",
                          []
                        |),
                        [
                          M.alloc (|
                            Value.Array
                              [ Value.Tuple [ M.read (| self |); Value.Integer IntegerKind.Usize 1 ]
                              ]
                          |)
                        ]
                      |)
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_preorder_traversal_with_depth :
      M.IsAssociatedFunction Self "preorder_traversal_with_depth" preorder_traversal_with_depth.
  End Impl_move_binary_format_file_format_SignatureToken.
  
  (* StructRecord
    {
      name := "Constant";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("type_", Ty.path "move_binary_format::file_format::SignatureToken");
          ("data",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [ Ty.path "u8"; Ty.path "alloc::alloc::Global" ])
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_Constant.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Constant".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::Constant"
            [
              ("type_",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::SignatureToken",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::Constant",
                      "type_"
                    |)
                  ]
                |));
              ("data",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [ Ty.path "u8"; Ty.path "alloc::alloc::Global" ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::Constant",
                      "data"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_Constant.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_Constant.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Constant".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field2_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "Constant" |);
              M.read (| Value.String "type_" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::Constant",
                "type_"
              |);
              M.read (| Value.String "data" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::Constant",
                  "data"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_Constant.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_Constant.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Constant".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_Constant.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_Constant.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Constant".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_Constant.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_Constant.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Constant".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            M.call_closure (|
              M.get_trait_method (|
                "core::cmp::PartialEq",
                Ty.path "move_binary_format::file_format::SignatureToken",
                [ Ty.path "move_binary_format::file_format::SignatureToken" ],
                "eq",
                []
              |),
              [
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::Constant",
                  "type_"
                |);
                M.SubPointer.get_struct_record_field (|
                  M.read (| other |),
                  "move_binary_format::file_format::Constant",
                  "type_"
                |)
              ]
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [ Ty.path "u8"; Ty.path "alloc::alloc::Global" ],
                  [
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [ Ty.path "u8"; Ty.path "alloc::alloc::Global" ]
                  ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::Constant",
                    "data"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::Constant",
                    "data"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_Constant.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_Constant.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Constant".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::hash::Hash",
                    Ty.path "move_binary_format::file_format::SignatureToken",
                    [],
                    "hash",
                    [ __H ]
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::Constant",
                      "type_"
                    |);
                    M.read (| state |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::hash::Hash",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [ Ty.path "u8"; Ty.path "alloc::alloc::Global" ],
                  [],
                  "hash",
                  [ __H ]
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::Constant",
                    "data"
                  |);
                  M.read (| state |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_Constant.
  
  (* StructRecord
    {
      name := "CodeUnit";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("locals", Ty.path "move_binary_format::file_format::SignatureIndex");
          ("code",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [ Ty.path "move_binary_format::file_format::Bytecode"; Ty.path "alloc::alloc::Global"
              ])
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_CodeUnit.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CodeUnit".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::CodeUnit"
            [
              ("locals",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::SignatureIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CodeUnit",
                      "locals"
                    |)
                  ]
                |));
              ("code",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::Bytecode";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CodeUnit",
                      "code"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_CodeUnit.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_CodeUnit.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CodeUnit".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "core::fmt::Formatter",
              "debug_struct_field2_finish",
              []
            |),
            [
              M.read (| f |);
              M.read (| Value.String "CodeUnit" |);
              M.read (| Value.String "locals" |);
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CodeUnit",
                "locals"
              |);
              M.read (| Value.String "code" |);
              M.alloc (|
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::CodeUnit",
                  "code"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_CodeUnit.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_CodeUnit.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CodeUnit".
    
    (* Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructRecord
            "move_binary_format::file_format::CodeUnit"
            [
              ("locals",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.path "move_binary_format::file_format::SignatureIndex",
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("code",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::Bytecode";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_CodeUnit.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_CodeUnit.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CodeUnit".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [ fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |))) ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_CodeUnit.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_CodeUnit.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CodeUnit".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_CodeUnit.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_CodeUnit.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CodeUnit".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            M.call_closure (|
              M.get_trait_method (|
                "core::cmp::PartialEq",
                Ty.path "move_binary_format::file_format::SignatureIndex",
                [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                "eq",
                []
              |),
              [
                M.SubPointer.get_struct_record_field (|
                  M.read (| self |),
                  "move_binary_format::file_format::CodeUnit",
                  "locals"
                |);
                M.SubPointer.get_struct_record_field (|
                  M.read (| other |),
                  "move_binary_format::file_format::CodeUnit",
                  "locals"
                |)
              ]
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::Bytecode";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::Bytecode";
                        Ty.path "alloc::alloc::Global"
                      ]
                  ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::CodeUnit",
                    "code"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::CodeUnit",
                    "code"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_CodeUnit.
  
  (*
  Enum Bytecode
  {
    const_params := [];
    ty_params := [];
    variants :=
      [
        {
          name := "Pop";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Ret";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "BrTrue";
          item := StructTuple [ Ty.path "u16" ];
          discriminant := None;
        };
        {
          name := "BrFalse";
          item := StructTuple [ Ty.path "u16" ];
          discriminant := None;
        };
        {
          name := "Branch";
          item := StructTuple [ Ty.path "u16" ];
          discriminant := None;
        };
        {
          name := "LdU8";
          item := StructTuple [ Ty.path "u8" ];
          discriminant := None;
        };
        {
          name := "LdU64";
          item := StructTuple [ Ty.path "u64" ];
          discriminant := None;
        };
        {
          name := "LdU128";
          item :=
            StructTuple
              [
                Ty.apply
                  (Ty.path "alloc::boxed::Box")
                  []
                  [ Ty.path "u128"; Ty.path "alloc::alloc::Global" ]
              ];
          discriminant := None;
        };
        {
          name := "CastU8";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "CastU64";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "CastU128";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "LdConst";
          item := StructTuple [ Ty.path "move_binary_format::file_format::ConstantPoolIndex" ];
          discriminant := None;
        };
        {
          name := "LdTrue";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "LdFalse";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "CopyLoc";
          item := StructTuple [ Ty.path "u8" ];
          discriminant := None;
        };
        {
          name := "MoveLoc";
          item := StructTuple [ Ty.path "u8" ];
          discriminant := None;
        };
        {
          name := "StLoc";
          item := StructTuple [ Ty.path "u8" ];
          discriminant := None;
        };
        {
          name := "Call";
          item := StructTuple [ Ty.path "move_binary_format::file_format::FunctionHandleIndex" ];
          discriminant := None;
        };
        {
          name := "CallGeneric";
          item :=
            StructTuple [ Ty.path "move_binary_format::file_format::FunctionInstantiationIndex" ];
          discriminant := None;
        };
        {
          name := "Pack";
          item := StructTuple [ Ty.path "move_binary_format::file_format::StructDefinitionIndex" ];
          discriminant := None;
        };
        {
          name := "PackGeneric";
          item :=
            StructTuple [ Ty.path "move_binary_format::file_format::StructDefInstantiationIndex" ];
          discriminant := None;
        };
        {
          name := "Unpack";
          item := StructTuple [ Ty.path "move_binary_format::file_format::StructDefinitionIndex" ];
          discriminant := None;
        };
        {
          name := "UnpackGeneric";
          item :=
            StructTuple [ Ty.path "move_binary_format::file_format::StructDefInstantiationIndex" ];
          discriminant := None;
        };
        {
          name := "ReadRef";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "WriteRef";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "FreezeRef";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "MutBorrowLoc";
          item := StructTuple [ Ty.path "u8" ];
          discriminant := None;
        };
        {
          name := "ImmBorrowLoc";
          item := StructTuple [ Ty.path "u8" ];
          discriminant := None;
        };
        {
          name := "MutBorrowField";
          item := StructTuple [ Ty.path "move_binary_format::file_format::FieldHandleIndex" ];
          discriminant := None;
        };
        {
          name := "MutBorrowFieldGeneric";
          item :=
            StructTuple [ Ty.path "move_binary_format::file_format::FieldInstantiationIndex" ];
          discriminant := None;
        };
        {
          name := "ImmBorrowField";
          item := StructTuple [ Ty.path "move_binary_format::file_format::FieldHandleIndex" ];
          discriminant := None;
        };
        {
          name := "ImmBorrowFieldGeneric";
          item :=
            StructTuple [ Ty.path "move_binary_format::file_format::FieldInstantiationIndex" ];
          discriminant := None;
        };
        {
          name := "Add";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Sub";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Mul";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Mod";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Div";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "BitOr";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "BitAnd";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Xor";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Or";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "And";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Not";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Eq";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Neq";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Lt";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Gt";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Le";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Ge";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Abort";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Nop";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Shl";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "Shr";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "VecPack";
          item :=
            StructTuple
              [ Ty.path "move_binary_format::file_format::SignatureIndex"; Ty.path "u64" ];
          discriminant := None;
        };
        {
          name := "VecLen";
          item := StructTuple [ Ty.path "move_binary_format::file_format::SignatureIndex" ];
          discriminant := None;
        };
        {
          name := "VecImmBorrow";
          item := StructTuple [ Ty.path "move_binary_format::file_format::SignatureIndex" ];
          discriminant := None;
        };
        {
          name := "VecMutBorrow";
          item := StructTuple [ Ty.path "move_binary_format::file_format::SignatureIndex" ];
          discriminant := None;
        };
        {
          name := "VecPushBack";
          item := StructTuple [ Ty.path "move_binary_format::file_format::SignatureIndex" ];
          discriminant := None;
        };
        {
          name := "VecPopBack";
          item := StructTuple [ Ty.path "move_binary_format::file_format::SignatureIndex" ];
          discriminant := None;
        };
        {
          name := "VecUnpack";
          item :=
            StructTuple
              [ Ty.path "move_binary_format::file_format::SignatureIndex"; Ty.path "u64" ];
          discriminant := None;
        };
        {
          name := "VecSwap";
          item := StructTuple [ Ty.path "move_binary_format::file_format::SignatureIndex" ];
          discriminant := None;
        };
        {
          name := "LdU16";
          item := StructTuple [ Ty.path "u16" ];
          discriminant := None;
        };
        {
          name := "LdU32";
          item := StructTuple [ Ty.path "u32" ];
          discriminant := None;
        };
        {
          name := "LdU256";
          item :=
            StructTuple
              [
                Ty.apply
                  (Ty.path "alloc::boxed::Box")
                  []
                  [ Ty.path "move_core_types::u256::U256"; Ty.path "alloc::alloc::Global" ]
              ];
          discriminant := None;
        };
        {
          name := "CastU16";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "CastU32";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "CastU256";
          item := StructTuple [];
          discriminant := None;
        };
        {
          name := "ExistsDeprecated";
          item := StructTuple [ Ty.path "move_binary_format::file_format::StructDefinitionIndex" ];
          discriminant := None;
        };
        {
          name := "ExistsGenericDeprecated";
          item :=
            StructTuple [ Ty.path "move_binary_format::file_format::StructDefInstantiationIndex" ];
          discriminant := None;
        };
        {
          name := "MoveFromDeprecated";
          item := StructTuple [ Ty.path "move_binary_format::file_format::StructDefinitionIndex" ];
          discriminant := None;
        };
        {
          name := "MoveFromGenericDeprecated";
          item :=
            StructTuple [ Ty.path "move_binary_format::file_format::StructDefInstantiationIndex" ];
          discriminant := None;
        };
        {
          name := "MoveToDeprecated";
          item := StructTuple [ Ty.path "move_binary_format::file_format::StructDefinitionIndex" ];
          discriminant := None;
        };
        {
          name := "MoveToGenericDeprecated";
          item :=
            StructTuple [ Ty.path "move_binary_format::file_format::StructDefInstantiationIndex" ];
          discriminant := None;
        };
        {
          name := "MutBorrowGlobalDeprecated";
          item := StructTuple [ Ty.path "move_binary_format::file_format::StructDefinitionIndex" ];
          discriminant := None;
        };
        {
          name := "MutBorrowGlobalGenericDeprecated";
          item :=
            StructTuple [ Ty.path "move_binary_format::file_format::StructDefInstantiationIndex" ];
          discriminant := None;
        };
        {
          name := "ImmBorrowGlobalDeprecated";
          item := StructTuple [ Ty.path "move_binary_format::file_format::StructDefinitionIndex" ];
          discriminant := None;
        };
        {
          name := "ImmBorrowGlobalGenericDeprecated";
          item :=
            StructTuple [ Ty.path "move_binary_format::file_format::StructDefInstantiationIndex" ];
          discriminant := None;
        }
      ];
  }
  *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_Bytecode.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Bytecode".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Pop" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Pop" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Ret" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Ret" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::BrTrue",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::BrTrue"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u16",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::BrFalse",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::BrFalse"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u16",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Branch",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::Branch"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u16",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU8",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::LdU8"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u8",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU64",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::LdU64"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u64",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU128",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::LdU128"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.apply
                                (Ty.path "alloc::boxed::Box")
                                []
                                [ Ty.path "u128"; Ty.path "alloc::alloc::Global" ],
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU8"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::CastU8" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU64"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::CastU64" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU128"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::CastU128" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdConst",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::LdConst"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::ConstantPoolIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdTrue"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::LdTrue" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdFalse"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::LdFalse" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CopyLoc",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::CopyLoc"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u8",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveLoc",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::MoveLoc"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u8",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::StLoc",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::StLoc"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u8",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Call",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::Call"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::FunctionHandleIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CallGeneric",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::CallGeneric"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::FunctionInstantiationIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Pack",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::Pack"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::PackGeneric",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::PackGeneric"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path
                                "move_binary_format::file_format::StructDefInstantiationIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Unpack",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::Unpack"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::UnpackGeneric",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::UnpackGeneric"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path
                                "move_binary_format::file_format::StructDefInstantiationIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ReadRef"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::ReadRef" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::WriteRef"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::WriteRef" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::FreezeRef"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::FreezeRef" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowLoc",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::MutBorrowLoc"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u8",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowLoc",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::ImmBorrowLoc"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u8",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowField",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::MutBorrowField"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::FieldHandleIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowFieldGeneric",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::MutBorrowFieldGeneric"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::FieldInstantiationIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowField",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::ImmBorrowField"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::FieldHandleIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowFieldGeneric",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::ImmBorrowFieldGeneric"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::FieldInstantiationIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Add" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Add" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Sub" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Sub" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Mul" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Mul" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Mod" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Mod" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Div" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Div" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::BitOr"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::BitOr" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::BitAnd"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::BitAnd" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Xor" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Xor" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Or" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Or" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::And" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::And" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Not" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Not" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Eq" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Eq" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Neq" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Neq" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Lt" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Lt" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Gt" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Gt" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Le" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Le" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Ge" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Ge" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Abort"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Abort" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Nop" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Nop" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Shl" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Shl" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Shr" |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::Shr" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPack",
                        0
                      |) in
                    let γ1_1 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPack",
                        1
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    let __self_1 := M.alloc (| γ1_1 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::VecPack"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::SignatureIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |);
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u64",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_1 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecLen",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::VecLen"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::SignatureIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecImmBorrow",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::VecImmBorrow"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::SignatureIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecMutBorrow",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::VecMutBorrow"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::SignatureIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPushBack",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::VecPushBack"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::SignatureIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPopBack",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::VecPopBack"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::SignatureIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecUnpack",
                        0
                      |) in
                    let γ1_1 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecUnpack",
                        1
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    let __self_1 := M.alloc (| γ1_1 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::VecUnpack"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::SignatureIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |);
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u64",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_1 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecSwap",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::VecSwap"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::SignatureIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU16",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::LdU16"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u16",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU32",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::LdU32"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "u32",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU256",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::LdU256"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.apply
                                (Ty.path "alloc::boxed::Box")
                                []
                                [
                                  Ty.path "move_core_types::u256::U256";
                                  Ty.path "alloc::alloc::Global"
                                ],
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU16"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::CastU16" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU32"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::CastU32" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU256"
                      |) in
                    M.alloc (|
                      Value.StructTuple "move_binary_format::file_format::Bytecode::CastU256" []
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ExistsDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::ExistsDeprecated"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ExistsGenericDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::ExistsGenericDeprecated"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path
                                "move_binary_format::file_format::StructDefInstantiationIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveFromDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::MoveFromDeprecated"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveFromGenericDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::MoveFromGenericDeprecated"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path
                                "move_binary_format::file_format::StructDefInstantiationIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveToDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::MoveToDeprecated"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveToGenericDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::MoveToGenericDeprecated"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path
                                "move_binary_format::file_format::StructDefInstantiationIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowGlobalDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::MutBorrowGlobalDeprecated"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowGlobalGenericDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::MutBorrowGlobalGenericDeprecated"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path
                                "move_binary_format::file_format::StructDefInstantiationIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowGlobalDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::ImmBorrowGlobalDeprecated"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowGlobalGenericDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      Value.StructTuple
                        "move_binary_format::file_format::Bytecode::ImmBorrowGlobalGenericDeprecated"
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "core::clone::Clone",
                              Ty.path
                                "move_binary_format::file_format::StructDefInstantiationIndex",
                              [],
                              "clone",
                              []
                            |),
                            [ M.read (| __self_0 |) ]
                          |)
                        ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_Bytecode.
  
  Module Impl_core_hash_Hash_for_move_binary_format_file_format_Bytecode.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Bytecode".
    
    (* Hash *)
    Definition hash (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [ __H ], [ self; state ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let state := M.alloc (| state |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Bytecode" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ _ :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (| "core::hash::Hash", Ty.path "isize", [], "hash", [ __H ] |),
                  [ __self_discr; M.read (| state |) ]
                |)
              |) in
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::BrTrue",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u16",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::BrFalse",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u16",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Branch",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u16",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU8",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u8",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU64",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u64",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU128",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [ Ty.path "u128"; Ty.path "alloc::alloc::Global" ],
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdConst",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::ConstantPoolIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CopyLoc",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u8",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveLoc",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u8",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::StLoc",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u8",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Call",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::FunctionHandleIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CallGeneric",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::FunctionInstantiationIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Pack",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::PackGeneric",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefInstantiationIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Unpack",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::UnpackGeneric",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefInstantiationIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowLoc",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u8",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowLoc",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u8",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowField",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::FieldHandleIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowFieldGeneric",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::FieldInstantiationIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowField",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::FieldHandleIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowFieldGeneric",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::FieldInstantiationIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPack",
                        0
                      |) in
                    let γ1_1 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPack",
                        1
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    let __self_1 := M.alloc (| γ1_1 |) in
                    let~ _ :=
                      M.alloc (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "core::hash::Hash",
                            Ty.path "move_binary_format::file_format::SignatureIndex",
                            [],
                            "hash",
                            [ __H ]
                          |),
                          [ M.read (| __self_0 |); M.read (| state |) ]
                        |)
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u64",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_1 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecLen",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::SignatureIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecImmBorrow",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::SignatureIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecMutBorrow",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::SignatureIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPushBack",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::SignatureIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPopBack",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::SignatureIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecUnpack",
                        0
                      |) in
                    let γ1_1 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecUnpack",
                        1
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    let __self_1 := M.alloc (| γ1_1 |) in
                    let~ _ :=
                      M.alloc (|
                        M.call_closure (|
                          M.get_trait_method (|
                            "core::hash::Hash",
                            Ty.path "move_binary_format::file_format::SignatureIndex",
                            [],
                            "hash",
                            [ __H ]
                          |),
                          [ M.read (| __self_0 |); M.read (| state |) ]
                        |)
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u64",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_1 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecSwap",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::SignatureIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU16",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u16",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU32",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "u32",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU256",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.apply
                            (Ty.path "alloc::boxed::Box")
                            []
                            [ Ty.path "move_core_types::u256::U256"; Ty.path "alloc::alloc::Global"
                            ],
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ExistsDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ExistsGenericDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefInstantiationIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveFromDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveFromGenericDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefInstantiationIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveToDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveToGenericDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefInstantiationIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowGlobalDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowGlobalGenericDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefInstantiationIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowGlobalDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowGlobalGenericDeprecated",
                        0
                      |) in
                    let __self_0 := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::hash::Hash",
                          Ty.path "move_binary_format::file_format::StructDefInstantiationIndex",
                          [],
                          "hash",
                          [ __H ]
                        |),
                        [ M.read (| __self_0 |); M.read (| state |) ]
                      |)
                    |)));
                fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::hash::Hash"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("hash", InstanceField.Method hash) ].
  End Impl_core_hash_Hash_for_move_binary_format_file_format_Bytecode.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_Bytecode.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Bytecode".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (M.match_operator (|
                              Value.DeclaredButUndefined,
                              [
                                fun γ =>
                                  ltac:(M.monadic
                                    (M.match_operator (|
                                      Value.DeclaredButUndefined,
                                      [
                                        fun γ =>
                                          ltac:(M.monadic
                                            (M.match_operator (|
                                              Value.DeclaredButUndefined,
                                              [
                                                fun γ =>
                                                  ltac:(M.monadic
                                                    (M.match_operator (|
                                                      Value.DeclaredButUndefined,
                                                      [
                                                        fun γ =>
                                                          ltac:(M.monadic
                                                            (M.match_operator (|
                                                              Value.DeclaredButUndefined,
                                                              [
                                                                fun γ =>
                                                                  ltac:(M.monadic
                                                                    (M.match_operator (|
                                                                      Value.DeclaredButUndefined,
                                                                      [
                                                                        fun γ =>
                                                                          ltac:(M.monadic
                                                                            (M.match_operator (|
                                                                              Value.DeclaredButUndefined,
                                                                              [
                                                                                fun γ =>
                                                                                  ltac:(M.monadic
                                                                                    (M.match_operator (|
                                                                                      Value.DeclaredButUndefined,
                                                                                      [
                                                                                        fun γ =>
                                                                                          ltac:(M.monadic
                                                                                            (M.match_operator (|
                                                                                              Value.DeclaredButUndefined,
                                                                                              [
                                                                                                fun
                                                                                                    γ =>
                                                                                                  ltac:(M.monadic
                                                                                                    (M.match_operator (|
                                                                                                      Value.DeclaredButUndefined,
                                                                                                      [
                                                                                                        fun
                                                                                                            γ =>
                                                                                                          ltac:(M.monadic
                                                                                                            (M.match_operator (|
                                                                                                              Value.DeclaredButUndefined,
                                                                                                              [
                                                                                                                fun
                                                                                                                    γ =>
                                                                                                                  ltac:(M.monadic
                                                                                                                    (M.match_operator (|
                                                                                                                      Value.DeclaredButUndefined,
                                                                                                                      [
                                                                                                                        fun
                                                                                                                            γ =>
                                                                                                                          ltac:(M.monadic
                                                                                                                            (M.match_operator (|
                                                                                                                              Value.DeclaredButUndefined,
                                                                                                                              [
                                                                                                                                fun
                                                                                                                                    γ =>
                                                                                                                                  ltac:(M.monadic
                                                                                                                                    (M.match_operator (|
                                                                                                                                      Value.DeclaredButUndefined,
                                                                                                                                      [
                                                                                                                                        fun
                                                                                                                                            γ =>
                                                                                                                                          ltac:(M.monadic
                                                                                                                                            (M.alloc (|
                                                                                                                                              Value.Tuple
                                                                                                                                                []
                                                                                                                                            |)))
                                                                                                                                      ]
                                                                                                                                    |)))
                                                                                                                              ]
                                                                                                                            |)))
                                                                                                                      ]
                                                                                                                    |)))
                                                                                                              ]
                                                                                                            |)))
                                                                                                      ]
                                                                                                    |)))
                                                                                              ]
                                                                                            |)))
                                                                                      ]
                                                                                    |)))
                                                                              ]
                                                                            |)))
                                                                      ]
                                                                    |)))
                                                              ]
                                                            |)))
                                                      ]
                                                    |)))
                                              ]
                                            |)))
                                      ]
                                    |)))
                              ]
                            |)))
                      ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_Bytecode.
  
  Module Impl_move_binary_format_file_format_Bytecode.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Bytecode".
    
    (* VariantCount *)
    (* Ty.path "usize" *)
    Definition value_VARIANT_COUNT : Value.t :=
      M.run ltac:(M.monadic (M.alloc (| Value.Integer IntegerKind.Usize 77 |))).
    
    Axiom AssociatedConstant_value_VARIANT_COUNT :
      M.IsAssociatedConstant Self "value_VARIANT_COUNT" value_VARIANT_COUNT.
    (*
        pub fn is_unconditional_branch(&self) -> bool {
            matches!(self, Bytecode::Ret | Bytecode::Abort | Bytecode::Branch(_))
        }
    *)
    Definition is_unconditional_branch (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::Bytecode::Ret"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::file_format::Bytecode::Abort"
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::Bytecode::Branch",
                                0
                              |) in
                            Value.Tuple []))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [] => ltac:(M.monadic (M.alloc (| Value.Bool true |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)));
                fun γ => ltac:(M.monadic (M.alloc (| Value.Bool false |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_unconditional_branch :
      M.IsAssociatedFunction Self "is_unconditional_branch" is_unconditional_branch.
    
    (*
        pub fn is_conditional_branch(&self) -> bool {
            matches!(self, Bytecode::BrFalse(_) | Bytecode::BrTrue(_))
        }
    *)
    Definition is_conditional_branch (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::Bytecode::BrFalse",
                                0
                              |) in
                            Value.Tuple []));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::Bytecode::BrTrue",
                                0
                              |) in
                            Value.Tuple []))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [] => ltac:(M.monadic (M.alloc (| Value.Bool true |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)));
                fun γ => ltac:(M.monadic (M.alloc (| Value.Bool false |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_conditional_branch :
      M.IsAssociatedFunction Self "is_conditional_branch" is_conditional_branch.
    
    (*
        pub fn is_branch(&self) -> bool {
            self.is_conditional_branch() || self.is_unconditional_branch()
        }
    *)
    Definition is_branch (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          LogicalOp.or (|
            M.call_closure (|
              M.get_associated_function (|
                Ty.path "move_binary_format::file_format::Bytecode",
                "is_conditional_branch",
                []
              |),
              [ M.read (| self |) ]
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_associated_function (|
                  Ty.path "move_binary_format::file_format::Bytecode",
                  "is_unconditional_branch",
                  []
                |),
                [ M.read (| self |) ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_is_branch : M.IsAssociatedFunction Self "is_branch" is_branch.
    
    (*
        pub fn offset(&self) -> Option<&CodeOffset> {
            match self {
                Bytecode::BrFalse(offset) | Bytecode::BrTrue(offset) | Bytecode::Branch(offset) => {
                    Some(offset)
                }
                _ => None,
            }
        }
    *)
    Definition offset (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::Bytecode::BrFalse",
                                0
                              |) in
                            let offset := M.alloc (| γ1_0 |) in
                            Value.Tuple [ offset ]));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::Bytecode::BrTrue",
                                0
                              |) in
                            let offset := M.alloc (| γ1_0 |) in
                            Value.Tuple [ offset ]));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ := M.read (| γ |) in
                            let γ1_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "move_binary_format::file_format::Bytecode::Branch",
                                0
                              |) in
                            let offset := M.alloc (| γ1_0 |) in
                            Value.Tuple [ offset ]))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [ offset ] =>
                              ltac:(M.monadic
                                (M.alloc (|
                                  Value.StructTuple
                                    "core::option::Option::Some"
                                    [ M.read (| offset |) ]
                                |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)));
                fun γ =>
                  ltac:(M.monadic (M.alloc (| Value.StructTuple "core::option::Option::None" [] |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_offset : M.IsAssociatedFunction Self "offset" offset.
    
    (*
        pub fn get_successors(pc: CodeOffset, code: &[Bytecode]) -> Vec<CodeOffset> {
            assert!(
                // The program counter must remain within the bounds of the code
                pc < u16::MAX && (pc as usize) < code.len(),
                "Program counter out of bounds"
            );
    
            let bytecode = &code[pc as usize];
            let mut v = vec![];
    
            if let Some(offset) = bytecode.offset() {
                v.push( *offset);
            }
    
            let next_pc = pc + 1;
            if next_pc >= code.len() as CodeOffset {
                return v;
            }
    
            if !bytecode.is_unconditional_branch() && !v.contains(&next_pc) {
                // avoid duplicates
                v.push(pc + 1);
            }
    
            // always give successors in ascending order
            if v.len() > 1 && v[0] > v[1] {
                v.swap(0, 1);
            }
    
            v
        }
    *)
    Definition get_successors (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ pc; code ] =>
        ltac:(M.monadic
          (let pc := M.alloc (| pc |) in
          let code := M.alloc (| code |) in
          M.catch_return (|
            ltac:(M.monadic
              (M.read (|
                let~ _ :=
                  M.match_operator (|
                    M.alloc (| Value.Tuple [] |),
                    [
                      fun γ =>
                        ltac:(M.monadic
                          (let γ :=
                            M.use
                              (M.alloc (|
                                UnOp.not (|
                                  LogicalOp.and (|
                                    BinOp.lt (|
                                      M.read (| pc |),
                                      M.read (| M.get_constant (| "core::num::MAX" |) |)
                                    |),
                                    ltac:(M.monadic
                                      (BinOp.lt (|
                                        M.rust_cast (M.read (| pc |)),
                                        M.call_closure (|
                                          M.get_associated_function (|
                                            Ty.apply
                                              (Ty.path "slice")
                                              []
                                              [ Ty.path "move_binary_format::file_format::Bytecode"
                                              ],
                                            "len",
                                            []
                                          |),
                                          [ M.read (| code |) ]
                                        |)
                                      |)))
                                  |)
                                |)
                              |)) in
                          let _ :=
                            M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                          M.alloc (|
                            M.never_to_any (|
                              M.call_closure (|
                                M.get_function (| "core::panicking::panic_fmt", [] |),
                                [
                                  M.call_closure (|
                                    M.get_associated_function (|
                                      Ty.path "core::fmt::Arguments",
                                      "new_const",
                                      []
                                    |),
                                    [
                                      M.alloc (|
                                        Value.Array
                                          [
                                            M.read (|
                                              Value.String "Program counter out of bounds"
                                            |)
                                          ]
                                      |)
                                    ]
                                  |)
                                ]
                              |)
                            |)
                          |)));
                      fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                    ]
                  |) in
                let~ bytecode :=
                  M.alloc (|
                    M.SubPointer.get_array_field (|
                      M.read (| code |),
                      M.alloc (| M.rust_cast (M.read (| pc |)) |)
                    |)
                  |) in
                let~ v :=
                  M.alloc (|
                    M.call_closure (|
                      M.get_associated_function (|
                        Ty.apply
                          (Ty.path "alloc::vec::Vec")
                          []
                          [ Ty.path "u16"; Ty.path "alloc::alloc::Global" ],
                        "new",
                        []
                      |),
                      []
                    |)
                  |) in
                let~ _ :=
                  M.match_operator (|
                    M.alloc (| Value.Tuple [] |),
                    [
                      fun γ =>
                        ltac:(M.monadic
                          (let γ :=
                            M.alloc (|
                              M.call_closure (|
                                M.get_associated_function (|
                                  Ty.path "move_binary_format::file_format::Bytecode",
                                  "offset",
                                  []
                                |),
                                [ M.read (| bytecode |) ]
                              |)
                            |) in
                          let γ0_0 :=
                            M.SubPointer.get_struct_tuple_field (|
                              γ,
                              "core::option::Option::Some",
                              0
                            |) in
                          let offset := M.copy (| γ0_0 |) in
                          let~ _ :=
                            M.alloc (|
                              M.call_closure (|
                                M.get_associated_function (|
                                  Ty.apply
                                    (Ty.path "alloc::vec::Vec")
                                    []
                                    [ Ty.path "u16"; Ty.path "alloc::alloc::Global" ],
                                  "push",
                                  []
                                |),
                                [ v; M.read (| M.read (| offset |) |) ]
                              |)
                            |) in
                          M.alloc (| Value.Tuple [] |)));
                      fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                    ]
                  |) in
                let~ next_pc :=
                  M.alloc (|
                    BinOp.Wrap.add (| M.read (| pc |), Value.Integer IntegerKind.U16 1 |)
                  |) in
                let~ _ :=
                  M.match_operator (|
                    M.alloc (| Value.Tuple [] |),
                    [
                      fun γ =>
                        ltac:(M.monadic
                          (let γ :=
                            M.use
                              (M.alloc (|
                                BinOp.ge (|
                                  M.read (| next_pc |),
                                  M.rust_cast
                                    (M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.apply
                                          (Ty.path "slice")
                                          []
                                          [ Ty.path "move_binary_format::file_format::Bytecode" ],
                                        "len",
                                        []
                                      |),
                                      [ M.read (| code |) ]
                                    |))
                                |)
                              |)) in
                          let _ :=
                            M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                          M.alloc (|
                            M.never_to_any (| M.read (| M.return_ (| M.read (| v |) |) |) |)
                          |)));
                      fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                    ]
                  |) in
                let~ _ :=
                  M.match_operator (|
                    M.alloc (| Value.Tuple [] |),
                    [
                      fun γ =>
                        ltac:(M.monadic
                          (let γ :=
                            M.use
                              (M.alloc (|
                                LogicalOp.and (|
                                  UnOp.not (|
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "move_binary_format::file_format::Bytecode",
                                        "is_unconditional_branch",
                                        []
                                      |),
                                      [ M.read (| bytecode |) ]
                                    |)
                                  |),
                                  ltac:(M.monadic
                                    (UnOp.not (|
                                      M.call_closure (|
                                        M.get_associated_function (|
                                          Ty.apply (Ty.path "slice") [] [ Ty.path "u16" ],
                                          "contains",
                                          []
                                        |),
                                        [
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "core::ops::deref::Deref",
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [ Ty.path "u16"; Ty.path "alloc::alloc::Global" ],
                                              [],
                                              "deref",
                                              []
                                            |),
                                            [ v ]
                                          |);
                                          next_pc
                                        ]
                                      |)
                                    |)))
                                |)
                              |)) in
                          let _ :=
                            M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                          let~ _ :=
                            M.alloc (|
                              M.call_closure (|
                                M.get_associated_function (|
                                  Ty.apply
                                    (Ty.path "alloc::vec::Vec")
                                    []
                                    [ Ty.path "u16"; Ty.path "alloc::alloc::Global" ],
                                  "push",
                                  []
                                |),
                                [
                                  v;
                                  BinOp.Wrap.add (|
                                    M.read (| pc |),
                                    Value.Integer IntegerKind.U16 1
                                  |)
                                ]
                              |)
                            |) in
                          M.alloc (| Value.Tuple [] |)));
                      fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                    ]
                  |) in
                let~ _ :=
                  M.match_operator (|
                    M.alloc (| Value.Tuple [] |),
                    [
                      fun γ =>
                        ltac:(M.monadic
                          (let γ :=
                            M.use
                              (M.alloc (|
                                LogicalOp.and (|
                                  BinOp.gt (|
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.apply
                                          (Ty.path "alloc::vec::Vec")
                                          []
                                          [ Ty.path "u16"; Ty.path "alloc::alloc::Global" ],
                                        "len",
                                        []
                                      |),
                                      [ v ]
                                    |),
                                    Value.Integer IntegerKind.Usize 1
                                  |),
                                  ltac:(M.monadic
                                    (BinOp.gt (|
                                      M.read (|
                                        M.call_closure (|
                                          M.get_trait_method (|
                                            "core::ops::index::Index",
                                            Ty.apply
                                              (Ty.path "alloc::vec::Vec")
                                              []
                                              [ Ty.path "u16"; Ty.path "alloc::alloc::Global" ],
                                            [ Ty.path "usize" ],
                                            "index",
                                            []
                                          |),
                                          [ v; Value.Integer IntegerKind.Usize 0 ]
                                        |)
                                      |),
                                      M.read (|
                                        M.call_closure (|
                                          M.get_trait_method (|
                                            "core::ops::index::Index",
                                            Ty.apply
                                              (Ty.path "alloc::vec::Vec")
                                              []
                                              [ Ty.path "u16"; Ty.path "alloc::alloc::Global" ],
                                            [ Ty.path "usize" ],
                                            "index",
                                            []
                                          |),
                                          [ v; Value.Integer IntegerKind.Usize 1 ]
                                        |)
                                      |)
                                    |)))
                                |)
                              |)) in
                          let _ :=
                            M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                          let~ _ :=
                            M.alloc (|
                              M.call_closure (|
                                M.get_associated_function (|
                                  Ty.apply (Ty.path "slice") [] [ Ty.path "u16" ],
                                  "swap",
                                  []
                                |),
                                [
                                  M.call_closure (|
                                    M.get_trait_method (|
                                      "core::ops::deref::DerefMut",
                                      Ty.apply
                                        (Ty.path "alloc::vec::Vec")
                                        []
                                        [ Ty.path "u16"; Ty.path "alloc::alloc::Global" ],
                                      [],
                                      "deref_mut",
                                      []
                                    |),
                                    [ v ]
                                  |);
                                  Value.Integer IntegerKind.Usize 0;
                                  Value.Integer IntegerKind.Usize 1
                                ]
                              |)
                            |) in
                          M.alloc (| Value.Tuple [] |)));
                      fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                    ]
                  |) in
                v
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_get_successors :
      M.IsAssociatedFunction Self "get_successors" get_successors.
  End Impl_move_binary_format_file_format_Bytecode.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_Bytecode.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Bytecode".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_Bytecode.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_Bytecode.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Bytecode".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          M.read (|
            let~ __self_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Bytecode" ]
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            let~ __arg1_discr :=
              M.alloc (|
                M.call_closure (|
                  M.get_function (|
                    "core::intrinsics::discriminant_value",
                    [ Ty.path "move_binary_format::file_format::Bytecode" ]
                  |),
                  [ M.read (| other |) ]
                |)
              |) in
            M.alloc (|
              LogicalOp.and (|
                BinOp.eq (| M.read (| __self_discr |), M.read (| __arg1_discr |) |),
                ltac:(M.monadic
                  (M.read (|
                    M.match_operator (|
                      M.alloc (| Value.Tuple [ M.read (| self |); M.read (| other |) ] |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::BrTrue",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::BrTrue",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u16" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::BrFalse",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::BrFalse",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u16" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::Branch",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::Branch",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u16" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::LdU8",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::LdU8",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u8" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::LdU64",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::LdU64",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u64" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::LdU128",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::LdU128",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.apply
                                        (Ty.path "alloc::boxed::Box")
                                        []
                                        [ Ty.path "u128"; Ty.path "alloc::alloc::Global" ]
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.apply
                                          (Ty.path "alloc::boxed::Box")
                                          []
                                          [ Ty.path "u128"; Ty.path "alloc::alloc::Global" ]
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::LdConst",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::LdConst",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::ConstantPoolIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::ConstantPoolIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::CopyLoc",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::CopyLoc",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u8" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::MoveLoc",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::MoveLoc",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u8" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::StLoc",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::StLoc",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u8" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::Call",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::Call",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::FunctionHandleIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::FunctionHandleIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::CallGeneric",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::CallGeneric",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::FunctionInstantiationIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::FunctionInstantiationIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::Pack",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::Pack",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefinitionIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefinitionIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::PackGeneric",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::PackGeneric",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefInstantiationIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefInstantiationIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::Unpack",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::Unpack",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefinitionIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefinitionIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::UnpackGeneric",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::UnpackGeneric",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefInstantiationIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefInstantiationIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::MutBorrowLoc",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::MutBorrowLoc",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u8" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::ImmBorrowLoc",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::ImmBorrowLoc",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u8" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::MutBorrowField",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::MutBorrowField",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::FieldHandleIndex" ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::FieldHandleIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::MutBorrowFieldGeneric",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::MutBorrowFieldGeneric",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::FieldInstantiationIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::FieldInstantiationIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::ImmBorrowField",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::ImmBorrowField",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::FieldHandleIndex" ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::FieldHandleIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::ImmBorrowFieldGeneric",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::ImmBorrowFieldGeneric",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::FieldInstantiationIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::FieldInstantiationIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::VecPack",
                                0
                              |) in
                            let γ2_1 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::VecPack",
                                1
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let __self_1 := M.alloc (| γ2_1 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::VecPack",
                                0
                              |) in
                            let γ2_1 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::VecPack",
                                1
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            let __arg1_1 := M.alloc (| γ2_1 |) in
                            M.alloc (|
                              LogicalOp.and (|
                                M.call_closure (|
                                  M.get_trait_method (|
                                    "core::cmp::PartialEq",
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                                    [
                                      Ty.apply
                                        (Ty.path "&")
                                        []
                                        [ Ty.path "move_binary_format::file_format::SignatureIndex"
                                        ]
                                    ],
                                    "eq",
                                    []
                                  |),
                                  [ __self_0; __arg1_0 ]
                                |),
                                ltac:(M.monadic
                                  (M.call_closure (|
                                    M.get_trait_method (|
                                      "core::cmp::PartialEq",
                                      Ty.apply (Ty.path "&") [] [ Ty.path "u64" ],
                                      [ Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ],
                                      "eq",
                                      []
                                    |),
                                    [ __self_1; __arg1_1 ]
                                  |)))
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::VecLen",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::VecLen",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::SignatureIndex" ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::VecImmBorrow",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::VecImmBorrow",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::SignatureIndex" ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::VecMutBorrow",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::VecMutBorrow",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::SignatureIndex" ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::VecPushBack",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::VecPushBack",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::SignatureIndex" ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::VecPopBack",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::VecPopBack",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::SignatureIndex" ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::VecUnpack",
                                0
                              |) in
                            let γ2_1 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::VecUnpack",
                                1
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let __self_1 := M.alloc (| γ2_1 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::VecUnpack",
                                0
                              |) in
                            let γ2_1 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::VecUnpack",
                                1
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            let __arg1_1 := M.alloc (| γ2_1 |) in
                            M.alloc (|
                              LogicalOp.and (|
                                M.call_closure (|
                                  M.get_trait_method (|
                                    "core::cmp::PartialEq",
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                                    [
                                      Ty.apply
                                        (Ty.path "&")
                                        []
                                        [ Ty.path "move_binary_format::file_format::SignatureIndex"
                                        ]
                                    ],
                                    "eq",
                                    []
                                  |),
                                  [ __self_0; __arg1_0 ]
                                |),
                                ltac:(M.monadic
                                  (M.call_closure (|
                                    M.get_trait_method (|
                                      "core::cmp::PartialEq",
                                      Ty.apply (Ty.path "&") [] [ Ty.path "u64" ],
                                      [ Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ],
                                      "eq",
                                      []
                                    |),
                                    [ __self_1; __arg1_1 ]
                                  |)))
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::VecSwap",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::VecSwap",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [ Ty.path "move_binary_format::file_format::SignatureIndex" ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [ Ty.path "move_binary_format::file_format::SignatureIndex" ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::LdU16",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::LdU16",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u16" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::LdU32",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::LdU32",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply (Ty.path "&") [] [ Ty.path "u32" ],
                                  [ Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::LdU256",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::LdU256",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.apply
                                        (Ty.path "alloc::boxed::Box")
                                        []
                                        [
                                          Ty.path "move_core_types::u256::U256";
                                          Ty.path "alloc::alloc::Global"
                                        ]
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.apply
                                          (Ty.path "alloc::boxed::Box")
                                          []
                                          [
                                            Ty.path "move_core_types::u256::U256";
                                            Ty.path "alloc::alloc::Global"
                                          ]
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::ExistsDeprecated",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::ExistsDeprecated",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefinitionIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefinitionIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::ExistsGenericDeprecated",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::ExistsGenericDeprecated",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefInstantiationIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefInstantiationIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::MoveFromDeprecated",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::MoveFromDeprecated",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefinitionIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefinitionIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::MoveFromGenericDeprecated",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::MoveFromGenericDeprecated",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefInstantiationIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefInstantiationIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::MoveToDeprecated",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::MoveToDeprecated",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefinitionIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefinitionIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::MoveToGenericDeprecated",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::MoveToGenericDeprecated",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefInstantiationIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefInstantiationIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::MutBorrowGlobalDeprecated",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::MutBorrowGlobalDeprecated",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefinitionIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefinitionIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::MutBorrowGlobalGenericDeprecated",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::MutBorrowGlobalGenericDeprecated",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefInstantiationIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefInstantiationIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::ImmBorrowGlobalDeprecated",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::ImmBorrowGlobalDeprecated",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefinitionIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefinitionIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                            let γ0_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                            let γ0_0 := M.read (| γ0_0 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_0,
                                "move_binary_format::file_format::Bytecode::ImmBorrowGlobalGenericDeprecated",
                                0
                              |) in
                            let __self_0 := M.alloc (| γ2_0 |) in
                            let γ0_1 := M.read (| γ0_1 |) in
                            let γ2_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ0_1,
                                "move_binary_format::file_format::Bytecode::ImmBorrowGlobalGenericDeprecated",
                                0
                              |) in
                            let __arg1_0 := M.alloc (| γ2_0 |) in
                            M.alloc (|
                              M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::StructDefInstantiationIndex"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefInstantiationIndex"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [ __self_0; __arg1_0 ]
                              |)
                            |)));
                        fun γ => ltac:(M.monadic (M.alloc (| Value.Bool true |)))
                      ]
                    |)
                  |)))
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_Bytecode.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_Bytecode.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::Bytecode".
    
    (*
        fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
            match self {
                Bytecode::Pop => write!(f, "Pop"),
                Bytecode::Ret => write!(f, "Ret"),
                Bytecode::BrTrue(a) => write!(f, "BrTrue({})", a),
                Bytecode::BrFalse(a) => write!(f, "BrFalse({})", a),
                Bytecode::Branch(a) => write!(f, "Branch({})", a),
                Bytecode::LdU8(a) => write!(f, "LdU8({})", a),
                Bytecode::LdU16(a) => write!(f, "LdU16({})", a),
                Bytecode::LdU32(a) => write!(f, "LdU32({})", a),
                Bytecode::LdU64(a) => write!(f, "LdU64({})", a),
                Bytecode::LdU128(a) => write!(f, "LdU128({})", a),
                Bytecode::LdU256(a) => write!(f, "LdU256({})", a),
                Bytecode::CastU8 => write!(f, "CastU8"),
                Bytecode::CastU16 => write!(f, "CastU16"),
                Bytecode::CastU32 => write!(f, "CastU32"),
                Bytecode::CastU64 => write!(f, "CastU64"),
                Bytecode::CastU128 => write!(f, "CastU128"),
                Bytecode::CastU256 => write!(f, "CastU256"),
                Bytecode::LdConst(a) => write!(f, "LdConst({})", a),
                Bytecode::LdTrue => write!(f, "LdTrue"),
                Bytecode::LdFalse => write!(f, "LdFalse"),
                Bytecode::CopyLoc(a) => write!(f, "CopyLoc({})", a),
                Bytecode::MoveLoc(a) => write!(f, "MoveLoc({})", a),
                Bytecode::StLoc(a) => write!(f, "StLoc({})", a),
                Bytecode::Call(a) => write!(f, "Call({})", a),
                Bytecode::CallGeneric(a) => write!(f, "CallGeneric({})", a),
                Bytecode::Pack(a) => write!(f, "Pack({})", a),
                Bytecode::PackGeneric(a) => write!(f, "PackGeneric({})", a),
                Bytecode::Unpack(a) => write!(f, "Unpack({})", a),
                Bytecode::UnpackGeneric(a) => write!(f, "UnpackGeneric({})", a),
                Bytecode::ReadRef => write!(f, "ReadRef"),
                Bytecode::WriteRef => write!(f, "WriteRef"),
                Bytecode::FreezeRef => write!(f, "FreezeRef"),
                Bytecode::MutBorrowLoc(a) => write!(f, "MutBorrowLoc({})", a),
                Bytecode::ImmBorrowLoc(a) => write!(f, "ImmBorrowLoc({})", a),
                Bytecode::MutBorrowField(a) => write!(f, "MutBorrowField({:?})", a),
                Bytecode::MutBorrowFieldGeneric(a) => write!(f, "MutBorrowFieldGeneric({:?})", a),
                Bytecode::ImmBorrowField(a) => write!(f, "ImmBorrowField({:?})", a),
                Bytecode::ImmBorrowFieldGeneric(a) => write!(f, "ImmBorrowFieldGeneric({:?})", a),
                Bytecode::MutBorrowGlobalDeprecated(a) => write!(f, "MutBorrowGlobal({:?})", a),
                Bytecode::MutBorrowGlobalGenericDeprecated(a) => {
                    write!(f, "MutBorrowGlobalGeneric({:?})", a)
                }
                Bytecode::ImmBorrowGlobalDeprecated(a) => write!(f, "ImmBorrowGlobal({:?})", a),
                Bytecode::ImmBorrowGlobalGenericDeprecated(a) => {
                    write!(f, "ImmBorrowGlobalGeneric({:?})", a)
                }
                Bytecode::Add => write!(f, "Add"),
                Bytecode::Sub => write!(f, "Sub"),
                Bytecode::Mul => write!(f, "Mul"),
                Bytecode::Mod => write!(f, "Mod"),
                Bytecode::Div => write!(f, "Div"),
                Bytecode::BitOr => write!(f, "BitOr"),
                Bytecode::BitAnd => write!(f, "BitAnd"),
                Bytecode::Xor => write!(f, "Xor"),
                Bytecode::Shl => write!(f, "Shl"),
                Bytecode::Shr => write!(f, "Shr"),
                Bytecode::Or => write!(f, "Or"),
                Bytecode::And => write!(f, "And"),
                Bytecode::Not => write!(f, "Not"),
                Bytecode::Eq => write!(f, "Eq"),
                Bytecode::Neq => write!(f, "Neq"),
                Bytecode::Lt => write!(f, "Lt"),
                Bytecode::Gt => write!(f, "Gt"),
                Bytecode::Le => write!(f, "Le"),
                Bytecode::Ge => write!(f, "Ge"),
                Bytecode::Abort => write!(f, "Abort"),
                Bytecode::Nop => write!(f, "Nop"),
                Bytecode::ExistsDeprecated(a) => write!(f, "Exists({:?})", a),
                Bytecode::ExistsGenericDeprecated(a) => write!(f, "ExistsGeneric({:?})", a),
                Bytecode::MoveFromDeprecated(a) => write!(f, "MoveFrom({:?})", a),
                Bytecode::MoveFromGenericDeprecated(a) => write!(f, "MoveFromGeneric({:?})", a),
                Bytecode::MoveToDeprecated(a) => write!(f, "MoveTo({:?})", a),
                Bytecode::MoveToGenericDeprecated(a) => write!(f, "MoveToGeneric({:?})", a),
                Bytecode::VecPack(a, n) => write!(f, "VecPack({}, {})", a, n),
                Bytecode::VecLen(a) => write!(f, "VecLen({})", a),
                Bytecode::VecImmBorrow(a) => write!(f, "VecImmBorrow({})", a),
                Bytecode::VecMutBorrow(a) => write!(f, "VecMutBorrow({})", a),
                Bytecode::VecPushBack(a) => write!(f, "VecPushBack({})", a),
                Bytecode::VecPopBack(a) => write!(f, "VecPopBack({})", a),
                Bytecode::VecUnpack(a, n) => write!(f, "VecUnpack({}, {})", a, n),
                Bytecode::VecSwap(a) => write!(f, "VecSwap({})", a),
            }
        }
    *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.read (|
            M.match_operator (|
              self,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Pop" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Pop" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Ret" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Ret" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::BrTrue",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "BrTrue(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::BrFalse",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "BrFalse(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Branch",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "Branch(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU8",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [ M.read (| Value.String "LdU8(" |); M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU16",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "LdU16(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU32",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "LdU32(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU64",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "LdU64(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU128",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "LdU128(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.apply
                                                (Ty.path "alloc::boxed::Box")
                                                []
                                                [ Ty.path "u128"; Ty.path "alloc::alloc::Global" ]
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdU256",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "LdU256(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.apply
                                                (Ty.path "alloc::boxed::Box")
                                                []
                                                [
                                                  Ty.path "move_core_types::u256::U256";
                                                  Ty.path "alloc::alloc::Global"
                                                ]
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU8"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "CastU8" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU16"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "CastU16" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU32"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "CastU32" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU64"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "CastU64" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU128"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "CastU128" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CastU256"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "CastU256" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdConst",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "LdConst(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::ConstantPoolIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdTrue"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "LdTrue" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::LdFalse"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "LdFalse" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CopyLoc",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "CopyLoc(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveLoc",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MoveLoc(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::StLoc",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "StLoc(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Call",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [ M.read (| Value.String "Call(" |); M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::FunctionHandleIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::CallGeneric",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "CallGeneric(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::FunctionInstantiationIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Pack",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [ M.read (| Value.String "Pack(" |); M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefinitionIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::PackGeneric",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "PackGeneric(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefInstantiationIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Unpack",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "Unpack(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefinitionIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::UnpackGeneric",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "UnpackGeneric(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefInstantiationIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ReadRef"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "ReadRef" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::WriteRef"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "WriteRef" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::FreezeRef"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "FreezeRef" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowLoc",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MutBorrowLoc(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowLoc",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "ImmBorrowLoc(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowField",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MutBorrowField(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::FieldHandleIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowFieldGeneric",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MutBorrowFieldGeneric(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::FieldInstantiationIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowField",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "ImmBorrowField(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::FieldHandleIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowFieldGeneric",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "ImmBorrowFieldGeneric(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::FieldInstantiationIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowGlobalDeprecated",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MutBorrowGlobal(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefinitionIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MutBorrowGlobalGenericDeprecated",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MutBorrowGlobalGeneric(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefInstantiationIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowGlobalDeprecated",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "ImmBorrowGlobal(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefinitionIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ImmBorrowGlobalGenericDeprecated",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "ImmBorrowGlobalGeneric(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefInstantiationIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Add" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Add" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Sub" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Sub" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Mul" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Mul" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Mod" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Mod" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Div" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Div" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::BitOr"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "BitOr" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::BitAnd"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "BitAnd" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Xor" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Xor" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Shl" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Shl" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Shr" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Shr" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Or" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Or" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::And" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "And" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Not" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Not" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Eq" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Eq" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Neq" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Neq" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Lt" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Lt" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Gt" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Gt" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Le" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Le" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Ge" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Ge" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::file_format::Bytecode::Abort"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Abort" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::file_format::Bytecode::Nop" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_const",
                              []
                            |),
                            [ M.alloc (| Value.Array [ M.read (| Value.String "Nop" |) ] |) ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ExistsDeprecated",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "Exists(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefinitionIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::ExistsGenericDeprecated",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "ExistsGeneric(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefInstantiationIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveFromDeprecated",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MoveFrom(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefinitionIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveFromGenericDeprecated",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MoveFromGeneric(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefInstantiationIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveToDeprecated",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MoveTo(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefinitionIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::MoveToGenericDeprecated",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "MoveToGeneric(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_debug",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructDefInstantiationIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPack",
                        0
                      |) in
                    let γ1_1 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPack",
                        1
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    let n := M.alloc (| γ1_1 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "VecPack(" |);
                                    M.read (| Value.String ", " |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::SignatureIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |);
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
                                      |),
                                      [ n ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecLen",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "VecLen(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::SignatureIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecImmBorrow",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "VecImmBorrow(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::SignatureIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecMutBorrow",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "VecMutBorrow(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::SignatureIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPushBack",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "VecPushBack(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::SignatureIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecPopBack",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "VecPopBack(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::SignatureIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecUnpack",
                        0
                      |) in
                    let γ1_1 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecUnpack",
                        1
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    let n := M.alloc (| γ1_1 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "VecUnpack(" |);
                                    M.read (| Value.String ", " |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::SignatureIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |);
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [ Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
                                      |),
                                      [ n ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let γ := M.read (| γ |) in
                    let γ1_0 :=
                      M.SubPointer.get_struct_tuple_field (|
                        γ,
                        "move_binary_format::file_format::Bytecode::VecSwap",
                        0
                      |) in
                    let a := M.alloc (| γ1_0 |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "core::fmt::Formatter",
                          "write_fmt",
                          []
                        |),
                        [
                          M.read (| f |);
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "core::fmt::Arguments",
                              "new_v1",
                              []
                            |),
                            [
                              M.alloc (|
                                Value.Array
                                  [
                                    M.read (| Value.String "VecSwap(" |);
                                    M.read (| Value.String ")" |)
                                  ]
                              |);
                              M.alloc (|
                                Value.Array
                                  [
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "core::fmt::rt::Argument",
                                        "new_display",
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::SignatureIndex"
                                            ]
                                        ]
                                      |),
                                      [ a ]
                                    |)
                                  ]
                              |)
                            ]
                          |)
                        ]
                      |)
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_Bytecode.
  
  
  (* StructRecord
    {
      name := "CompiledModule";
      const_params := [];
      ty_params := [];
      fields :=
        [
          ("version", Ty.path "u32");
          ("self_module_handle_idx", Ty.path "move_binary_format::file_format::ModuleHandleIndex");
          ("module_handles",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::ModuleHandle";
                Ty.path "alloc::alloc::Global"
              ]);
          ("struct_handles",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::StructHandle";
                Ty.path "alloc::alloc::Global"
              ]);
          ("function_handles",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::FunctionHandle";
                Ty.path "alloc::alloc::Global"
              ]);
          ("field_handles",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::FieldHandle";
                Ty.path "alloc::alloc::Global"
              ]);
          ("friend_decls",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::ModuleHandle";
                Ty.path "alloc::alloc::Global"
              ]);
          ("struct_def_instantiations",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::StructDefInstantiation";
                Ty.path "alloc::alloc::Global"
              ]);
          ("function_instantiations",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::FunctionInstantiation";
                Ty.path "alloc::alloc::Global"
              ]);
          ("field_instantiations",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::FieldInstantiation";
                Ty.path "alloc::alloc::Global"
              ]);
          ("signatures",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [ Ty.path "move_binary_format::file_format::Signature"; Ty.path "alloc::alloc::Global"
              ]);
          ("identifiers",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [ Ty.path "move_core_types::identifier::Identifier"; Ty.path "alloc::alloc::Global"
              ]);
          ("address_identifiers",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_core_types::account_address::AccountAddress";
                Ty.path "alloc::alloc::Global"
              ]);
          ("constant_pool",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [ Ty.path "move_binary_format::file_format::Constant"; Ty.path "alloc::alloc::Global"
              ]);
          ("metadata",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [ Ty.path "move_core_types::metadata::Metadata"; Ty.path "alloc::alloc::Global" ]);
          ("struct_defs",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::StructDefinition";
                Ty.path "alloc::alloc::Global"
              ]);
          ("function_defs",
            Ty.apply
              (Ty.path "alloc::vec::Vec")
              []
              [
                Ty.path "move_binary_format::file_format::FunctionDefinition";
                Ty.path "alloc::alloc::Global"
              ])
        ];
    } *)
  
  Module Impl_core_clone_Clone_for_move_binary_format_file_format_CompiledModule.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CompiledModule".
    
    (* Clone *)
    Definition clone (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          Value.StructRecord
            "move_binary_format::file_format::CompiledModule"
            [
              ("version",
                M.call_closure (|
                  M.get_trait_method (| "core::clone::Clone", Ty.path "u32", [], "clone", [] |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "version"
                    |)
                  ]
                |));
              ("self_module_handle_idx",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "self_module_handle_idx"
                    |)
                  ]
                |));
              ("module_handles",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::ModuleHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "module_handles"
                    |)
                  ]
                |));
              ("struct_handles",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "struct_handles"
                    |)
                  ]
                |));
              ("function_handles",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FunctionHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "function_handles"
                    |)
                  ]
                |));
              ("field_handles",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FieldHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "field_handles"
                    |)
                  ]
                |));
              ("friend_decls",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::ModuleHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "friend_decls"
                    |)
                  ]
                |));
              ("struct_def_instantiations",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructDefInstantiation";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "struct_def_instantiations"
                    |)
                  ]
                |));
              ("function_instantiations",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FunctionInstantiation";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "function_instantiations"
                    |)
                  ]
                |));
              ("field_instantiations",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FieldInstantiation";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "field_instantiations"
                    |)
                  ]
                |));
              ("signatures",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::Signature";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "signatures"
                    |)
                  ]
                |));
              ("identifiers",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_core_types::identifier::Identifier";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "identifiers"
                    |)
                  ]
                |));
              ("address_identifiers",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_core_types::account_address::AccountAddress";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "address_identifiers"
                    |)
                  ]
                |));
              ("constant_pool",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::Constant";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "constant_pool"
                    |)
                  ]
                |));
              ("metadata",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_core_types::metadata::Metadata";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "metadata"
                    |)
                  ]
                |));
              ("struct_defs",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructDefinition";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "struct_defs"
                    |)
                  ]
                |));
              ("function_defs",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::clone::Clone",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FunctionDefinition";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "clone",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "function_defs"
                    |)
                  ]
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::clone::Clone"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("clone", InstanceField.Method clone) ].
  End Impl_core_clone_Clone_for_move_binary_format_file_format_CompiledModule.
  
  Module Impl_core_fmt_Debug_for_move_binary_format_file_format_CompiledModule.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CompiledModule".
    
    (* Debug *)
    Definition fmt (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; f ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let f := M.alloc (| f |) in
          M.read (|
            let~ names :=
              M.alloc (|
                M.alloc (|
                  Value.Array
                    [
                      M.read (| Value.String "version" |);
                      M.read (| Value.String "self_module_handle_idx" |);
                      M.read (| Value.String "module_handles" |);
                      M.read (| Value.String "struct_handles" |);
                      M.read (| Value.String "function_handles" |);
                      M.read (| Value.String "field_handles" |);
                      M.read (| Value.String "friend_decls" |);
                      M.read (| Value.String "struct_def_instantiations" |);
                      M.read (| Value.String "function_instantiations" |);
                      M.read (| Value.String "field_instantiations" |);
                      M.read (| Value.String "signatures" |);
                      M.read (| Value.String "identifiers" |);
                      M.read (| Value.String "address_identifiers" |);
                      M.read (| Value.String "constant_pool" |);
                      M.read (| Value.String "metadata" |);
                      M.read (| Value.String "struct_defs" |);
                      M.read (| Value.String "function_defs" |)
                    ]
                |)
              |) in
            let~ values :=
              M.alloc (|
                M.alloc (|
                  Value.Array
                    [
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "version"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "self_module_handle_idx"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "module_handles"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "struct_handles"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "function_handles"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "field_handles"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "friend_decls"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "struct_def_instantiations"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "function_instantiations"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "field_instantiations"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "signatures"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "identifiers"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "address_identifiers"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "constant_pool"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "metadata"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "struct_defs"
                      |);
                      M.alloc (|
                        M.SubPointer.get_struct_record_field (|
                          M.read (| self |),
                          "move_binary_format::file_format::CompiledModule",
                          "function_defs"
                        |)
                      |)
                    ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_associated_function (|
                  Ty.path "core::fmt::Formatter",
                  "debug_struct_fields_finish",
                  []
                |),
                [
                  M.read (| f |);
                  M.read (| Value.String "CompiledModule" |);
                  M.read (| names |);
                  M.read (| values |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::fmt::Debug"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("fmt", InstanceField.Method fmt) ].
  End Impl_core_fmt_Debug_for_move_binary_format_file_format_CompiledModule.
  
  Module Impl_core_default_Default_for_move_binary_format_file_format_CompiledModule.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CompiledModule".
    
    (* Default *)
    Definition default (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [] =>
        ltac:(M.monadic
          (Value.StructRecord
            "move_binary_format::file_format::CompiledModule"
            [
              ("version",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.path "u32",
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("self_module_handle_idx",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("module_handles",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::ModuleHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("struct_handles",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("function_handles",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FunctionHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("field_handles",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FieldHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("friend_decls",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::ModuleHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("struct_def_instantiations",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructDefInstantiation";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("function_instantiations",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FunctionInstantiation";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("field_instantiations",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FieldInstantiation";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("signatures",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::Signature";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("identifiers",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_core_types::identifier::Identifier";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("address_identifiers",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_core_types::account_address::AccountAddress";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("constant_pool",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::Constant";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("metadata",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_core_types::metadata::Metadata";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("struct_defs",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructDefinition";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |));
              ("function_defs",
                M.call_closure (|
                  M.get_trait_method (|
                    "core::default::Default",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FunctionDefinition";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [],
                    "default",
                    []
                  |),
                  []
                |))
            ]))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::default::Default"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("default", InstanceField.Method default) ].
  End Impl_core_default_Default_for_move_binary_format_file_format_CompiledModule.
  
  Module Impl_core_cmp_Eq_for_move_binary_format_file_format_CompiledModule.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CompiledModule".
    
    (* Eq *)
    Definition assert_receiver_is_total_eq
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.match_operator (|
              Value.DeclaredButUndefined,
              [
                fun γ =>
                  ltac:(M.monadic
                    (M.match_operator (|
                      Value.DeclaredButUndefined,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (M.match_operator (|
                              Value.DeclaredButUndefined,
                              [
                                fun γ =>
                                  ltac:(M.monadic
                                    (M.match_operator (|
                                      Value.DeclaredButUndefined,
                                      [
                                        fun γ =>
                                          ltac:(M.monadic
                                            (M.match_operator (|
                                              Value.DeclaredButUndefined,
                                              [
                                                fun γ =>
                                                  ltac:(M.monadic
                                                    (M.match_operator (|
                                                      Value.DeclaredButUndefined,
                                                      [
                                                        fun γ =>
                                                          ltac:(M.monadic
                                                            (M.match_operator (|
                                                              Value.DeclaredButUndefined,
                                                              [
                                                                fun γ =>
                                                                  ltac:(M.monadic
                                                                    (M.match_operator (|
                                                                      Value.DeclaredButUndefined,
                                                                      [
                                                                        fun γ =>
                                                                          ltac:(M.monadic
                                                                            (M.match_operator (|
                                                                              Value.DeclaredButUndefined,
                                                                              [
                                                                                fun γ =>
                                                                                  ltac:(M.monadic
                                                                                    (M.match_operator (|
                                                                                      Value.DeclaredButUndefined,
                                                                                      [
                                                                                        fun γ =>
                                                                                          ltac:(M.monadic
                                                                                            (M.match_operator (|
                                                                                              Value.DeclaredButUndefined,
                                                                                              [
                                                                                                fun
                                                                                                    γ =>
                                                                                                  ltac:(M.monadic
                                                                                                    (M.match_operator (|
                                                                                                      Value.DeclaredButUndefined,
                                                                                                      [
                                                                                                        fun
                                                                                                            γ =>
                                                                                                          ltac:(M.monadic
                                                                                                            (M.match_operator (|
                                                                                                              Value.DeclaredButUndefined,
                                                                                                              [
                                                                                                                fun
                                                                                                                    γ =>
                                                                                                                  ltac:(M.monadic
                                                                                                                    (M.match_operator (|
                                                                                                                      Value.DeclaredButUndefined,
                                                                                                                      [
                                                                                                                        fun
                                                                                                                            γ =>
                                                                                                                          ltac:(M.monadic
                                                                                                                            (M.match_operator (|
                                                                                                                              Value.DeclaredButUndefined,
                                                                                                                              [
                                                                                                                                fun
                                                                                                                                    γ =>
                                                                                                                                  ltac:(M.monadic
                                                                                                                                    (M.match_operator (|
                                                                                                                                      Value.DeclaredButUndefined,
                                                                                                                                      [
                                                                                                                                        fun
                                                                                                                                            γ =>
                                                                                                                                          ltac:(M.monadic
                                                                                                                                            (M.match_operator (|
                                                                                                                                              Value.DeclaredButUndefined,
                                                                                                                                              [
                                                                                                                                                fun
                                                                                                                                                    γ =>
                                                                                                                                                  ltac:(M.monadic
                                                                                                                                                    (M.alloc (|
                                                                                                                                                      Value.Tuple
                                                                                                                                                        []
                                                                                                                                                    |)))
                                                                                                                                              ]
                                                                                                                                            |)))
                                                                                                                                      ]
                                                                                                                                    |)))
                                                                                                                              ]
                                                                                                                            |)))
                                                                                                                      ]
                                                                                                                    |)))
                                                                                                              ]
                                                                                                            |)))
                                                                                                      ]
                                                                                                    |)))
                                                                                              ]
                                                                                            |)))
                                                                                      ]
                                                                                    |)))
                                                                              ]
                                                                            |)))
                                                                      ]
                                                                    |)))
                                                              ]
                                                            |)))
                                                      ]
                                                    |)))
                                              ]
                                            |)))
                                      ]
                                    |)))
                              ]
                            |)))
                      ]
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::Eq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *)
        [ ("assert_receiver_is_total_eq", InstanceField.Method assert_receiver_is_total_eq) ].
  End Impl_core_cmp_Eq_for_move_binary_format_file_format_CompiledModule.
  
  Module Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_CompiledModule.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CompiledModule".
    
    Axiom Implements :
      M.IsTraitInstance
        "core::marker::StructuralPartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [].
  End Impl_core_marker_StructuralPartialEq_for_move_binary_format_file_format_CompiledModule.
  
  Module Impl_core_cmp_PartialEq_for_move_binary_format_file_format_CompiledModule.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CompiledModule".
    
    (* PartialEq *)
    Definition eq (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; other ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let other := M.alloc (| other |) in
          LogicalOp.and (|
            LogicalOp.and (|
              LogicalOp.and (|
                LogicalOp.and (|
                  LogicalOp.and (|
                    LogicalOp.and (|
                      LogicalOp.and (|
                        LogicalOp.and (|
                          LogicalOp.and (|
                            LogicalOp.and (|
                              LogicalOp.and (|
                                LogicalOp.and (|
                                  LogicalOp.and (|
                                    LogicalOp.and (|
                                      LogicalOp.and (|
                                        LogicalOp.and (|
                                          BinOp.eq (|
                                            M.read (|
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| self |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "version"
                                              |)
                                            |),
                                            M.read (|
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| other |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "version"
                                              |)
                                            |)
                                          |),
                                          ltac:(M.monadic
                                            (M.call_closure (|
                                              M.get_trait_method (|
                                                "core::cmp::PartialEq",
                                                Ty.path
                                                  "move_binary_format::file_format::ModuleHandleIndex",
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::ModuleHandleIndex"
                                                ],
                                                "eq",
                                                []
                                              |),
                                              [
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| self |),
                                                  "move_binary_format::file_format::CompiledModule",
                                                  "self_module_handle_idx"
                                                |);
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| other |),
                                                  "move_binary_format::file_format::CompiledModule",
                                                  "self_module_handle_idx"
                                                |)
                                              ]
                                            |)))
                                        |),
                                        ltac:(M.monadic
                                          (M.call_closure (|
                                            M.get_trait_method (|
                                              "core::cmp::PartialEq",
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::ModuleHandle";
                                                  Ty.path "alloc::alloc::Global"
                                                ],
                                              [
                                                Ty.apply
                                                  (Ty.path "alloc::vec::Vec")
                                                  []
                                                  [
                                                    Ty.path
                                                      "move_binary_format::file_format::ModuleHandle";
                                                    Ty.path "alloc::alloc::Global"
                                                  ]
                                              ],
                                              "eq",
                                              []
                                            |),
                                            [
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| self |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "module_handles"
                                              |);
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| other |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "module_handles"
                                              |)
                                            ]
                                          |)))
                                      |),
                                      ltac:(M.monadic
                                        (M.call_closure (|
                                          M.get_trait_method (|
                                            "core::cmp::PartialEq",
                                            Ty.apply
                                              (Ty.path "alloc::vec::Vec")
                                              []
                                              [
                                                Ty.path
                                                  "move_binary_format::file_format::StructHandle";
                                                Ty.path "alloc::alloc::Global"
                                              ],
                                            [
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::StructHandle";
                                                  Ty.path "alloc::alloc::Global"
                                                ]
                                            ],
                                            "eq",
                                            []
                                          |),
                                          [
                                            M.SubPointer.get_struct_record_field (|
                                              M.read (| self |),
                                              "move_binary_format::file_format::CompiledModule",
                                              "struct_handles"
                                            |);
                                            M.SubPointer.get_struct_record_field (|
                                              M.read (| other |),
                                              "move_binary_format::file_format::CompiledModule",
                                              "struct_handles"
                                            |)
                                          ]
                                        |)))
                                    |),
                                    ltac:(M.monadic
                                      (M.call_closure (|
                                        M.get_trait_method (|
                                          "core::cmp::PartialEq",
                                          Ty.apply
                                            (Ty.path "alloc::vec::Vec")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::FunctionHandle";
                                              Ty.path "alloc::alloc::Global"
                                            ],
                                          [
                                            Ty.apply
                                              (Ty.path "alloc::vec::Vec")
                                              []
                                              [
                                                Ty.path
                                                  "move_binary_format::file_format::FunctionHandle";
                                                Ty.path "alloc::alloc::Global"
                                              ]
                                          ],
                                          "eq",
                                          []
                                        |),
                                        [
                                          M.SubPointer.get_struct_record_field (|
                                            M.read (| self |),
                                            "move_binary_format::file_format::CompiledModule",
                                            "function_handles"
                                          |);
                                          M.SubPointer.get_struct_record_field (|
                                            M.read (| other |),
                                            "move_binary_format::file_format::CompiledModule",
                                            "function_handles"
                                          |)
                                        ]
                                      |)))
                                  |),
                                  ltac:(M.monadic
                                    (M.call_closure (|
                                      M.get_trait_method (|
                                        "core::cmp::PartialEq",
                                        Ty.apply
                                          (Ty.path "alloc::vec::Vec")
                                          []
                                          [
                                            Ty.path "move_binary_format::file_format::FieldHandle";
                                            Ty.path "alloc::alloc::Global"
                                          ],
                                        [
                                          Ty.apply
                                            (Ty.path "alloc::vec::Vec")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::FieldHandle";
                                              Ty.path "alloc::alloc::Global"
                                            ]
                                        ],
                                        "eq",
                                        []
                                      |),
                                      [
                                        M.SubPointer.get_struct_record_field (|
                                          M.read (| self |),
                                          "move_binary_format::file_format::CompiledModule",
                                          "field_handles"
                                        |);
                                        M.SubPointer.get_struct_record_field (|
                                          M.read (| other |),
                                          "move_binary_format::file_format::CompiledModule",
                                          "field_handles"
                                        |)
                                      ]
                                    |)))
                                |),
                                ltac:(M.monadic
                                  (M.call_closure (|
                                    M.get_trait_method (|
                                      "core::cmp::PartialEq",
                                      Ty.apply
                                        (Ty.path "alloc::vec::Vec")
                                        []
                                        [
                                          Ty.path "move_binary_format::file_format::ModuleHandle";
                                          Ty.path "alloc::alloc::Global"
                                        ],
                                      [
                                        Ty.apply
                                          (Ty.path "alloc::vec::Vec")
                                          []
                                          [
                                            Ty.path "move_binary_format::file_format::ModuleHandle";
                                            Ty.path "alloc::alloc::Global"
                                          ]
                                      ],
                                      "eq",
                                      []
                                    |),
                                    [
                                      M.SubPointer.get_struct_record_field (|
                                        M.read (| self |),
                                        "move_binary_format::file_format::CompiledModule",
                                        "friend_decls"
                                      |);
                                      M.SubPointer.get_struct_record_field (|
                                        M.read (| other |),
                                        "move_binary_format::file_format::CompiledModule",
                                        "friend_decls"
                                      |)
                                    ]
                                  |)))
                              |),
                              ltac:(M.monadic
                                (M.call_closure (|
                                  M.get_trait_method (|
                                    "core::cmp::PartialEq",
                                    Ty.apply
                                      (Ty.path "alloc::vec::Vec")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::StructDefInstantiation";
                                        Ty.path "alloc::alloc::Global"
                                      ],
                                    [
                                      Ty.apply
                                        (Ty.path "alloc::vec::Vec")
                                        []
                                        [
                                          Ty.path
                                            "move_binary_format::file_format::StructDefInstantiation";
                                          Ty.path "alloc::alloc::Global"
                                        ]
                                    ],
                                    "eq",
                                    []
                                  |),
                                  [
                                    M.SubPointer.get_struct_record_field (|
                                      M.read (| self |),
                                      "move_binary_format::file_format::CompiledModule",
                                      "struct_def_instantiations"
                                    |);
                                    M.SubPointer.get_struct_record_field (|
                                      M.read (| other |),
                                      "move_binary_format::file_format::CompiledModule",
                                      "struct_def_instantiations"
                                    |)
                                  ]
                                |)))
                            |),
                            ltac:(M.monadic
                              (M.call_closure (|
                                M.get_trait_method (|
                                  "core::cmp::PartialEq",
                                  Ty.apply
                                    (Ty.path "alloc::vec::Vec")
                                    []
                                    [
                                      Ty.path
                                        "move_binary_format::file_format::FunctionInstantiation";
                                      Ty.path "alloc::alloc::Global"
                                    ],
                                  [
                                    Ty.apply
                                      (Ty.path "alloc::vec::Vec")
                                      []
                                      [
                                        Ty.path
                                          "move_binary_format::file_format::FunctionInstantiation";
                                        Ty.path "alloc::alloc::Global"
                                      ]
                                  ],
                                  "eq",
                                  []
                                |),
                                [
                                  M.SubPointer.get_struct_record_field (|
                                    M.read (| self |),
                                    "move_binary_format::file_format::CompiledModule",
                                    "function_instantiations"
                                  |);
                                  M.SubPointer.get_struct_record_field (|
                                    M.read (| other |),
                                    "move_binary_format::file_format::CompiledModule",
                                    "function_instantiations"
                                  |)
                                ]
                              |)))
                          |),
                          ltac:(M.monadic
                            (M.call_closure (|
                              M.get_trait_method (|
                                "core::cmp::PartialEq",
                                Ty.apply
                                  (Ty.path "alloc::vec::Vec")
                                  []
                                  [
                                    Ty.path "move_binary_format::file_format::FieldInstantiation";
                                    Ty.path "alloc::alloc::Global"
                                  ],
                                [
                                  Ty.apply
                                    (Ty.path "alloc::vec::Vec")
                                    []
                                    [
                                      Ty.path "move_binary_format::file_format::FieldInstantiation";
                                      Ty.path "alloc::alloc::Global"
                                    ]
                                ],
                                "eq",
                                []
                              |),
                              [
                                M.SubPointer.get_struct_record_field (|
                                  M.read (| self |),
                                  "move_binary_format::file_format::CompiledModule",
                                  "field_instantiations"
                                |);
                                M.SubPointer.get_struct_record_field (|
                                  M.read (| other |),
                                  "move_binary_format::file_format::CompiledModule",
                                  "field_instantiations"
                                |)
                              ]
                            |)))
                        |),
                        ltac:(M.monadic
                          (M.call_closure (|
                            M.get_trait_method (|
                              "core::cmp::PartialEq",
                              Ty.apply
                                (Ty.path "alloc::vec::Vec")
                                []
                                [
                                  Ty.path "move_binary_format::file_format::Signature";
                                  Ty.path "alloc::alloc::Global"
                                ],
                              [
                                Ty.apply
                                  (Ty.path "alloc::vec::Vec")
                                  []
                                  [
                                    Ty.path "move_binary_format::file_format::Signature";
                                    Ty.path "alloc::alloc::Global"
                                  ]
                              ],
                              "eq",
                              []
                            |),
                            [
                              M.SubPointer.get_struct_record_field (|
                                M.read (| self |),
                                "move_binary_format::file_format::CompiledModule",
                                "signatures"
                              |);
                              M.SubPointer.get_struct_record_field (|
                                M.read (| other |),
                                "move_binary_format::file_format::CompiledModule",
                                "signatures"
                              |)
                            ]
                          |)))
                      |),
                      ltac:(M.monadic
                        (M.call_closure (|
                          M.get_trait_method (|
                            "core::cmp::PartialEq",
                            Ty.apply
                              (Ty.path "alloc::vec::Vec")
                              []
                              [
                                Ty.path "move_core_types::identifier::Identifier";
                                Ty.path "alloc::alloc::Global"
                              ],
                            [
                              Ty.apply
                                (Ty.path "alloc::vec::Vec")
                                []
                                [
                                  Ty.path "move_core_types::identifier::Identifier";
                                  Ty.path "alloc::alloc::Global"
                                ]
                            ],
                            "eq",
                            []
                          |),
                          [
                            M.SubPointer.get_struct_record_field (|
                              M.read (| self |),
                              "move_binary_format::file_format::CompiledModule",
                              "identifiers"
                            |);
                            M.SubPointer.get_struct_record_field (|
                              M.read (| other |),
                              "move_binary_format::file_format::CompiledModule",
                              "identifiers"
                            |)
                          ]
                        |)))
                    |),
                    ltac:(M.monadic
                      (M.call_closure (|
                        M.get_trait_method (|
                          "core::cmp::PartialEq",
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_core_types::account_address::AccountAddress";
                              Ty.path "alloc::alloc::Global"
                            ],
                          [
                            Ty.apply
                              (Ty.path "alloc::vec::Vec")
                              []
                              [
                                Ty.path "move_core_types::account_address::AccountAddress";
                                Ty.path "alloc::alloc::Global"
                              ]
                          ],
                          "eq",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "address_identifiers"
                          |);
                          M.SubPointer.get_struct_record_field (|
                            M.read (| other |),
                            "move_binary_format::file_format::CompiledModule",
                            "address_identifiers"
                          |)
                        ]
                      |)))
                  |),
                  ltac:(M.monadic
                    (M.call_closure (|
                      M.get_trait_method (|
                        "core::cmp::PartialEq",
                        Ty.apply
                          (Ty.path "alloc::vec::Vec")
                          []
                          [
                            Ty.path "move_binary_format::file_format::Constant";
                            Ty.path "alloc::alloc::Global"
                          ],
                        [
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::Constant";
                              Ty.path "alloc::alloc::Global"
                            ]
                        ],
                        "eq",
                        []
                      |),
                      [
                        M.SubPointer.get_struct_record_field (|
                          M.read (| self |),
                          "move_binary_format::file_format::CompiledModule",
                          "constant_pool"
                        |);
                        M.SubPointer.get_struct_record_field (|
                          M.read (| other |),
                          "move_binary_format::file_format::CompiledModule",
                          "constant_pool"
                        |)
                      ]
                    |)))
                |),
                ltac:(M.monadic
                  (M.call_closure (|
                    M.get_trait_method (|
                      "core::cmp::PartialEq",
                      Ty.apply
                        (Ty.path "alloc::vec::Vec")
                        []
                        [
                          Ty.path "move_core_types::metadata::Metadata";
                          Ty.path "alloc::alloc::Global"
                        ],
                      [
                        Ty.apply
                          (Ty.path "alloc::vec::Vec")
                          []
                          [
                            Ty.path "move_core_types::metadata::Metadata";
                            Ty.path "alloc::alloc::Global"
                          ]
                      ],
                      "eq",
                      []
                    |),
                    [
                      M.SubPointer.get_struct_record_field (|
                        M.read (| self |),
                        "move_binary_format::file_format::CompiledModule",
                        "metadata"
                      |);
                      M.SubPointer.get_struct_record_field (|
                        M.read (| other |),
                        "move_binary_format::file_format::CompiledModule",
                        "metadata"
                      |)
                    ]
                  |)))
              |),
              ltac:(M.monadic
                (M.call_closure (|
                  M.get_trait_method (|
                    "core::cmp::PartialEq",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructDefinition";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [
                      Ty.apply
                        (Ty.path "alloc::vec::Vec")
                        []
                        [
                          Ty.path "move_binary_format::file_format::StructDefinition";
                          Ty.path "alloc::alloc::Global"
                        ]
                    ],
                    "eq",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "struct_defs"
                    |);
                    M.SubPointer.get_struct_record_field (|
                      M.read (| other |),
                      "move_binary_format::file_format::CompiledModule",
                      "struct_defs"
                    |)
                  ]
                |)))
            |),
            ltac:(M.monadic
              (M.call_closure (|
                M.get_trait_method (|
                  "core::cmp::PartialEq",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::FunctionDefinition";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FunctionDefinition";
                        Ty.path "alloc::alloc::Global"
                      ]
                  ],
                  "eq",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::CompiledModule",
                    "function_defs"
                  |);
                  M.SubPointer.get_struct_record_field (|
                    M.read (| other |),
                    "move_binary_format::file_format::CompiledModule",
                    "function_defs"
                  |)
                ]
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::cmp::PartialEq"
        Self
        (* Trait polymorphic types *) []
        (* Instance *) [ ("eq", InstanceField.Method eq) ].
  End Impl_core_cmp_PartialEq_for_move_binary_format_file_format_CompiledModule.
  
  Module Impl_move_binary_format_file_format_CompiledModule.
    Definition Self : Ty.t := Ty.path "move_binary_format::file_format::CompiledModule".
    
    (*
        pub fn kind_count(&self, kind: IndexKind) -> usize {
            debug_assert!(!matches!(
                kind,
                IndexKind::LocalPool
                    | IndexKind::CodeDefinition
                    | IndexKind::FieldDefinition
                    | IndexKind::TypeParameter
                    | IndexKind::MemberCount
            ));
            match kind {
                IndexKind::ModuleHandle => self.module_handles.len(),
                IndexKind::StructHandle => self.struct_handles.len(),
                IndexKind::FunctionHandle => self.function_handles.len(),
                IndexKind::FieldHandle => self.field_handles.len(),
                IndexKind::FriendDeclaration => self.friend_decls.len(),
                IndexKind::StructDefInstantiation => self.struct_def_instantiations.len(),
                IndexKind::FunctionInstantiation => self.function_instantiations.len(),
                IndexKind::FieldInstantiation => self.field_instantiations.len(),
                IndexKind::StructDefinition => self.struct_defs.len(),
                IndexKind::FunctionDefinition => self.function_defs.len(),
                IndexKind::Signature => self.signatures.len(),
                IndexKind::Identifier => self.identifiers.len(),
                IndexKind::AddressIdentifier => self.address_identifiers.len(),
                IndexKind::ConstantPool => self.constant_pool.len(),
                // XXX these two don't seem to belong here
                other @ IndexKind::LocalPool
                | other @ IndexKind::CodeDefinition
                | other @ IndexKind::FieldDefinition
                | other @ IndexKind::TypeParameter
                | other @ IndexKind::MemberCount => unreachable!("invalid kind for count: {:?}", other),
            }
        }
    *)
    Definition kind_count (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; kind ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let kind := M.alloc (| kind |) in
          M.read (|
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        UnOp.not (|
                                          M.read (|
                                            M.match_operator (|
                                              kind,
                                              [
                                                fun γ =>
                                                  ltac:(M.monadic
                                                    (M.find_or_pattern (|
                                                      γ,
                                                      [
                                                        fun γ =>
                                                          ltac:(M.monadic
                                                            (let _ :=
                                                              M.is_struct_tuple (|
                                                                γ,
                                                                "move_binary_format::IndexKind::LocalPool"
                                                              |) in
                                                            Value.Tuple []));
                                                        fun γ =>
                                                          ltac:(M.monadic
                                                            (let _ :=
                                                              M.is_struct_tuple (|
                                                                γ,
                                                                "move_binary_format::IndexKind::CodeDefinition"
                                                              |) in
                                                            Value.Tuple []));
                                                        fun γ =>
                                                          ltac:(M.monadic
                                                            (let _ :=
                                                              M.is_struct_tuple (|
                                                                γ,
                                                                "move_binary_format::IndexKind::FieldDefinition"
                                                              |) in
                                                            Value.Tuple []));
                                                        fun γ =>
                                                          ltac:(M.monadic
                                                            (let _ :=
                                                              M.is_struct_tuple (|
                                                                γ,
                                                                "move_binary_format::IndexKind::TypeParameter"
                                                              |) in
                                                            Value.Tuple []));
                                                        fun γ =>
                                                          ltac:(M.monadic
                                                            (let _ :=
                                                              M.is_struct_tuple (|
                                                                γ,
                                                                "move_binary_format::IndexKind::MemberCount"
                                                              |) in
                                                            Value.Tuple []))
                                                      ],
                                                      M.closure
                                                        (fun γ =>
                                                          ltac:(M.monadic
                                                            match γ with
                                                            | [] =>
                                                              ltac:(M.monadic
                                                                (M.alloc (| Value.Bool true |)))
                                                            | _ =>
                                                              M.impossible
                                                                "wrong number of arguments"
                                                            end))
                                                    |)));
                                                fun γ =>
                                                  ltac:(M.monadic (M.alloc (| Value.Bool false |)))
                                              ]
                                            |)
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: !matches!(kind, IndexKind::LocalPool | IndexKind::CodeDefinition |
        IndexKind::FieldDefinition | IndexKind::TypeParameter |
        IndexKind::MemberCount)"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            M.match_operator (|
              kind,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::IndexKind::ModuleHandle" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::ModuleHandle";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "module_handles"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::IndexKind::StructHandle" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::StructHandle";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "struct_handles"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::IndexKind::FunctionHandle" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::FunctionHandle";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "function_handles"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::IndexKind::FieldHandle" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::FieldHandle";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "field_handles"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::IndexKind::FriendDeclaration"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::ModuleHandle";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "friend_decls"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::IndexKind::StructDefInstantiation"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::StructDefInstantiation";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "struct_def_instantiations"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::IndexKind::FunctionInstantiation"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::FunctionInstantiation";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "function_instantiations"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::IndexKind::FieldInstantiation"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::FieldInstantiation";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "field_instantiations"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::IndexKind::StructDefinition"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::StructDefinition";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "struct_defs"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::IndexKind::FunctionDefinition"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::FunctionDefinition";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "function_defs"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::IndexKind::Signature" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::Signature";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "signatures"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::IndexKind::Identifier" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_core_types::identifier::Identifier";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "identifiers"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (|
                        γ,
                        "move_binary_format::IndexKind::AddressIdentifier"
                      |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_core_types::account_address::AccountAddress";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "address_identifiers"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (let _ :=
                      M.is_struct_tuple (| γ, "move_binary_format::IndexKind::ConstantPool" |) in
                    M.alloc (|
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.apply
                            (Ty.path "alloc::vec::Vec")
                            []
                            [
                              Ty.path "move_binary_format::file_format::Constant";
                              Ty.path "alloc::alloc::Global"
                            ],
                          "len",
                          []
                        |),
                        [
                          M.SubPointer.get_struct_record_field (|
                            M.read (| self |),
                            "move_binary_format::file_format::CompiledModule",
                            "constant_pool"
                          |)
                        ]
                      |)
                    |)));
                fun γ =>
                  ltac:(M.monadic
                    (M.find_or_pattern (|
                      γ,
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let other := M.copy (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::IndexKind::LocalPool"
                              |) in
                            Value.Tuple [ other ]));
                        fun γ =>
                          ltac:(M.monadic
                            (let other := M.copy (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::IndexKind::CodeDefinition"
                              |) in
                            Value.Tuple [ other ]));
                        fun γ =>
                          ltac:(M.monadic
                            (let other := M.copy (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::IndexKind::FieldDefinition"
                              |) in
                            Value.Tuple [ other ]));
                        fun γ =>
                          ltac:(M.monadic
                            (let other := M.copy (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::IndexKind::TypeParameter"
                              |) in
                            Value.Tuple [ other ]));
                        fun γ =>
                          ltac:(M.monadic
                            (let other := M.copy (| γ |) in
                            let _ :=
                              M.is_struct_tuple (|
                                γ,
                                "move_binary_format::IndexKind::MemberCount"
                              |) in
                            Value.Tuple [ other ]))
                      ],
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [ other ] =>
                              ltac:(M.monadic
                                (M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic_fmt", [] |),
                                      [
                                        M.call_closure (|
                                          M.get_associated_function (|
                                            Ty.path "core::fmt::Arguments",
                                            "new_v1",
                                            []
                                          |),
                                          [
                                            M.alloc (|
                                              Value.Array
                                                [
                                                  M.read (|
                                                    Value.String
                                                      "internal error: entered unreachable code: invalid kind for count: "
                                                  |)
                                                ]
                                            |);
                                            M.alloc (|
                                              Value.Array
                                                [
                                                  M.call_closure (|
                                                    M.get_associated_function (|
                                                      Ty.path "core::fmt::rt::Argument",
                                                      "new_debug",
                                                      [ Ty.path "move_binary_format::IndexKind" ]
                                                    |),
                                                    [ other ]
                                                  |)
                                                ]
                                            |)
                                          ]
                                        |)
                                      ]
                                    |)
                                  |)
                                |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    |)))
              ]
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_kind_count : M.IsAssociatedFunction Self "kind_count" kind_count.
    
    (*
        pub fn self_handle_idx(&self) -> ModuleHandleIndex {
            self.self_module_handle_idx
        }
    *)
    Definition self_handle_idx (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.SubPointer.get_struct_record_field (|
              M.read (| self |),
              "move_binary_format::file_format::CompiledModule",
              "self_module_handle_idx"
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_self_handle_idx :
      M.IsAssociatedFunction Self "self_handle_idx" self_handle_idx.
    
    (*
        pub fn self_handle(&self) -> &ModuleHandle {
            let handle = self.module_handle_at(self.self_handle_idx());
            debug_assert!(handle.address.into_index() < self.address_identifiers.len()); // invariant
            debug_assert!(handle.name.into_index() < self.identifiers.len()); // invariant
            handle
        }
    *)
    Definition self_handle (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            let~ handle :=
              M.alloc (|
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.path "move_binary_format::file_format::CompiledModule",
                    "module_handle_at",
                    []
                  |),
                  [
                    M.read (| self |);
                    M.call_closure (|
                      M.get_associated_function (|
                        Ty.path "move_binary_format::file_format::CompiledModule",
                        "self_handle_idx",
                        []
                      |),
                      [ M.read (| self |) ]
                    |)
                  ]
                |)
              |) in
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        BinOp.lt (|
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "move_binary_format::internals::ModuleIndex",
                                              Ty.path
                                                "move_binary_format::file_format::AddressIdentifierIndex",
                                              [],
                                              "into_index",
                                              []
                                            |),
                                            [
                                              M.read (|
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| handle |),
                                                  "move_binary_format::file_format::ModuleHandle",
                                                  "address"
                                                |)
                                              |)
                                            ]
                                          |),
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path
                                                    "move_core_types::account_address::AccountAddress";
                                                  Ty.path "alloc::alloc::Global"
                                                ],
                                              "len",
                                              []
                                            |),
                                            [
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| self |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "address_identifiers"
                                              |)
                                            ]
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: handle.address.into_index() < self.address_identifiers.len()"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        BinOp.lt (|
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "move_binary_format::internals::ModuleIndex",
                                              Ty.path
                                                "move_binary_format::file_format::IdentifierIndex",
                                              [],
                                              "into_index",
                                              []
                                            |),
                                            [
                                              M.read (|
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| handle |),
                                                  "move_binary_format::file_format::ModuleHandle",
                                                  "name"
                                                |)
                                              |)
                                            ]
                                          |),
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path "move_core_types::identifier::Identifier";
                                                  Ty.path "alloc::alloc::Global"
                                                ],
                                              "len",
                                              []
                                            |),
                                            [
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| self |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "identifiers"
                                              |)
                                            ]
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: handle.name.into_index() < self.identifiers.len()"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            M.alloc (| M.read (| handle |) |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_self_handle : M.IsAssociatedFunction Self "self_handle" self_handle.
    
    (*
        pub fn name(&self) -> &IdentStr {
            self.identifier_at(self.self_handle().name)
        }
    *)
    Definition name (ε : 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_associated_function (|
              Ty.path "move_binary_format::file_format::CompiledModule",
              "identifier_at",
              []
            |),
            [
              M.read (| self |);
              M.read (|
                M.SubPointer.get_struct_record_field (|
                  M.call_closure (|
                    M.get_associated_function (|
                      Ty.path "move_binary_format::file_format::CompiledModule",
                      "self_handle",
                      []
                    |),
                    [ M.read (| self |) ]
                  |),
                  "move_binary_format::file_format::ModuleHandle",
                  "name"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_name : M.IsAssociatedFunction Self "name" name.
    
    (*
        pub fn address(&self) -> &AccountAddress {
            self.address_identifier_at(self.self_handle().address)
        }
    *)
    Definition address (ε : 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_associated_function (|
              Ty.path "move_binary_format::file_format::CompiledModule",
              "address_identifier_at",
              []
            |),
            [
              M.read (| self |);
              M.read (|
                M.SubPointer.get_struct_record_field (|
                  M.call_closure (|
                    M.get_associated_function (|
                      Ty.path "move_binary_format::file_format::CompiledModule",
                      "self_handle",
                      []
                    |),
                    [ M.read (| self |) ]
                  |),
                  "move_binary_format::file_format::ModuleHandle",
                  "address"
                |)
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_address : M.IsAssociatedFunction Self "address" address.
    
    (*
        pub fn struct_name(&self, idx: StructDefinitionIndex) -> &IdentStr {
            let struct_def = self.struct_def_at(idx);
            let handle = self.struct_handle_at(struct_def.struct_handle);
            self.identifier_at(handle.name)
        }
    *)
    Definition struct_name (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.read (|
            let~ struct_def :=
              M.alloc (|
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.path "move_binary_format::file_format::CompiledModule",
                    "struct_def_at",
                    []
                  |),
                  [ M.read (| self |); M.read (| idx |) ]
                |)
              |) in
            let~ handle :=
              M.alloc (|
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.path "move_binary_format::file_format::CompiledModule",
                    "struct_handle_at",
                    []
                  |),
                  [
                    M.read (| self |);
                    M.read (|
                      M.SubPointer.get_struct_record_field (|
                        M.read (| struct_def |),
                        "move_binary_format::file_format::StructDefinition",
                        "struct_handle"
                      |)
                    |)
                  ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_associated_function (|
                  Ty.path "move_binary_format::file_format::CompiledModule",
                  "identifier_at",
                  []
                |),
                [
                  M.read (| self |);
                  M.read (|
                    M.SubPointer.get_struct_record_field (|
                      M.read (| handle |),
                      "move_binary_format::file_format::StructHandle",
                      "name"
                    |)
                  |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_struct_name : M.IsAssociatedFunction Self "struct_name" struct_name.
    
    (*
        pub fn module_handle_at(&self, idx: ModuleHandleIndex) -> &ModuleHandle {
            let handle = &self.module_handles[idx.into_index()];
            debug_assert!(handle.address.into_index() < self.address_identifiers.len()); // invariant
            debug_assert!(handle.name.into_index() < self.identifiers.len()); // invariant
            handle
        }
    *)
    Definition module_handle_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.read (|
            let~ handle :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::ops::index::Index",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::ModuleHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [ Ty.path "usize" ],
                    "index",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "module_handles"
                    |);
                    M.call_closure (|
                      M.get_trait_method (|
                        "move_binary_format::internals::ModuleIndex",
                        Ty.path "move_binary_format::file_format::ModuleHandleIndex",
                        [],
                        "into_index",
                        []
                      |),
                      [ M.read (| idx |) ]
                    |)
                  ]
                |)
              |) in
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        BinOp.lt (|
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "move_binary_format::internals::ModuleIndex",
                                              Ty.path
                                                "move_binary_format::file_format::AddressIdentifierIndex",
                                              [],
                                              "into_index",
                                              []
                                            |),
                                            [
                                              M.read (|
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| handle |),
                                                  "move_binary_format::file_format::ModuleHandle",
                                                  "address"
                                                |)
                                              |)
                                            ]
                                          |),
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path
                                                    "move_core_types::account_address::AccountAddress";
                                                  Ty.path "alloc::alloc::Global"
                                                ],
                                              "len",
                                              []
                                            |),
                                            [
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| self |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "address_identifiers"
                                              |)
                                            ]
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: handle.address.into_index() < self.address_identifiers.len()"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        BinOp.lt (|
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "move_binary_format::internals::ModuleIndex",
                                              Ty.path
                                                "move_binary_format::file_format::IdentifierIndex",
                                              [],
                                              "into_index",
                                              []
                                            |),
                                            [
                                              M.read (|
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| handle |),
                                                  "move_binary_format::file_format::ModuleHandle",
                                                  "name"
                                                |)
                                              |)
                                            ]
                                          |),
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path "move_core_types::identifier::Identifier";
                                                  Ty.path "alloc::alloc::Global"
                                                ],
                                              "len",
                                              []
                                            |),
                                            [
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| self |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "identifiers"
                                              |)
                                            ]
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: handle.name.into_index() < self.identifiers.len()"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            M.alloc (| M.read (| handle |) |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_module_handle_at :
      M.IsAssociatedFunction Self "module_handle_at" module_handle_at.
    
    (*
        pub fn struct_handle_at(&self, idx: StructHandleIndex) -> &StructHandle {
            let handle = &self.struct_handles[idx.into_index()];
            debug_assert!(handle.module.into_index() < self.module_handles.len()); // invariant
            handle
        }
    *)
    Definition struct_handle_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.read (|
            let~ handle :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::ops::index::Index",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::StructHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [ Ty.path "usize" ],
                    "index",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "struct_handles"
                    |);
                    M.call_closure (|
                      M.get_trait_method (|
                        "move_binary_format::internals::ModuleIndex",
                        Ty.path "move_binary_format::file_format::StructHandleIndex",
                        [],
                        "into_index",
                        []
                      |),
                      [ M.read (| idx |) ]
                    |)
                  ]
                |)
              |) in
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        BinOp.lt (|
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "move_binary_format::internals::ModuleIndex",
                                              Ty.path
                                                "move_binary_format::file_format::ModuleHandleIndex",
                                              [],
                                              "into_index",
                                              []
                                            |),
                                            [
                                              M.read (|
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| handle |),
                                                  "move_binary_format::file_format::StructHandle",
                                                  "module"
                                                |)
                                              |)
                                            ]
                                          |),
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::ModuleHandle";
                                                  Ty.path "alloc::alloc::Global"
                                                ],
                                              "len",
                                              []
                                            |),
                                            [
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| self |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "module_handles"
                                              |)
                                            ]
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: handle.module.into_index() < self.module_handles.len()"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            M.alloc (| M.read (| handle |) |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_struct_handle_at :
      M.IsAssociatedFunction Self "struct_handle_at" struct_handle_at.
    
    (*
        pub fn function_handle_at(&self, idx: FunctionHandleIndex) -> &FunctionHandle {
            let handle = &self.function_handles[idx.into_index()];
            debug_assert!(handle.parameters.into_index() < self.signatures.len()); // invariant
            debug_assert!(handle.return_.into_index() < self.signatures.len()); // invariant
            handle
        }
    *)
    Definition function_handle_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.read (|
            let~ handle :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::ops::index::Index",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FunctionHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [ Ty.path "usize" ],
                    "index",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "function_handles"
                    |);
                    M.call_closure (|
                      M.get_trait_method (|
                        "move_binary_format::internals::ModuleIndex",
                        Ty.path "move_binary_format::file_format::FunctionHandleIndex",
                        [],
                        "into_index",
                        []
                      |),
                      [ M.read (| idx |) ]
                    |)
                  ]
                |)
              |) in
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        BinOp.lt (|
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "move_binary_format::internals::ModuleIndex",
                                              Ty.path
                                                "move_binary_format::file_format::SignatureIndex",
                                              [],
                                              "into_index",
                                              []
                                            |),
                                            [
                                              M.read (|
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| handle |),
                                                  "move_binary_format::file_format::FunctionHandle",
                                                  "parameters"
                                                |)
                                              |)
                                            ]
                                          |),
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::Signature";
                                                  Ty.path "alloc::alloc::Global"
                                                ],
                                              "len",
                                              []
                                            |),
                                            [
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| self |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "signatures"
                                              |)
                                            ]
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: handle.parameters.into_index() < self.signatures.len()"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        BinOp.lt (|
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "move_binary_format::internals::ModuleIndex",
                                              Ty.path
                                                "move_binary_format::file_format::SignatureIndex",
                                              [],
                                              "into_index",
                                              []
                                            |),
                                            [
                                              M.read (|
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| handle |),
                                                  "move_binary_format::file_format::FunctionHandle",
                                                  "return_"
                                                |)
                                              |)
                                            ]
                                          |),
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::Signature";
                                                  Ty.path "alloc::alloc::Global"
                                                ],
                                              "len",
                                              []
                                            |),
                                            [
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| self |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "signatures"
                                              |)
                                            ]
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: handle.return_.into_index() < self.signatures.len()"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            M.alloc (| M.read (| handle |) |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_function_handle_at :
      M.IsAssociatedFunction Self "function_handle_at" function_handle_at.
    
    (*
        pub fn field_handle_at(&self, idx: FieldHandleIndex) -> &FieldHandle {
            let handle = &self.field_handles[idx.into_index()];
            debug_assert!(handle.owner.into_index() < self.struct_defs.len()); // invariant
            handle
        }
    *)
    Definition field_handle_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.read (|
            let~ handle :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::ops::index::Index",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FieldHandle";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [ Ty.path "usize" ],
                    "index",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "field_handles"
                    |);
                    M.call_closure (|
                      M.get_trait_method (|
                        "move_binary_format::internals::ModuleIndex",
                        Ty.path "move_binary_format::file_format::FieldHandleIndex",
                        [],
                        "into_index",
                        []
                      |),
                      [ M.read (| idx |) ]
                    |)
                  ]
                |)
              |) in
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        BinOp.lt (|
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "move_binary_format::internals::ModuleIndex",
                                              Ty.path
                                                "move_binary_format::file_format::StructDefinitionIndex",
                                              [],
                                              "into_index",
                                              []
                                            |),
                                            [
                                              M.read (|
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| handle |),
                                                  "move_binary_format::file_format::FieldHandle",
                                                  "owner"
                                                |)
                                              |)
                                            ]
                                          |),
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.apply
                                                (Ty.path "alloc::vec::Vec")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::StructDefinition";
                                                  Ty.path "alloc::alloc::Global"
                                                ],
                                              "len",
                                              []
                                            |),
                                            [
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| self |),
                                                "move_binary_format::file_format::CompiledModule",
                                                "struct_defs"
                                              |)
                                            ]
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: handle.owner.into_index() < self.struct_defs.len()"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            M.alloc (| M.read (| handle |) |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_field_handle_at :
      M.IsAssociatedFunction Self "field_handle_at" field_handle_at.
    
    (*
        pub fn struct_instantiation_at(
            &self,
            idx: StructDefInstantiationIndex,
        ) -> &StructDefInstantiation {
            &self.struct_def_instantiations[idx.into_index()]
        }
    *)
    Definition struct_instantiation_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::ops::index::Index",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::StructDefInstantiation";
                  Ty.path "alloc::alloc::Global"
                ],
              [ Ty.path "usize" ],
              "index",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "struct_def_instantiations"
              |);
              M.call_closure (|
                M.get_trait_method (|
                  "move_binary_format::internals::ModuleIndex",
                  Ty.path "move_binary_format::file_format::StructDefInstantiationIndex",
                  [],
                  "into_index",
                  []
                |),
                [ M.read (| idx |) ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_struct_instantiation_at :
      M.IsAssociatedFunction Self "struct_instantiation_at" struct_instantiation_at.
    
    (*
        pub fn function_instantiation_at(
            &self,
            idx: FunctionInstantiationIndex,
        ) -> &FunctionInstantiation {
            &self.function_instantiations[idx.into_index()]
        }
    *)
    Definition function_instantiation_at
        (ε : list Value.t)
        (τ : list Ty.t)
        (α : list Value.t)
        : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::ops::index::Index",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::FunctionInstantiation";
                  Ty.path "alloc::alloc::Global"
                ],
              [ Ty.path "usize" ],
              "index",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "function_instantiations"
              |);
              M.call_closure (|
                M.get_trait_method (|
                  "move_binary_format::internals::ModuleIndex",
                  Ty.path "move_binary_format::file_format::FunctionInstantiationIndex",
                  [],
                  "into_index",
                  []
                |),
                [ M.read (| idx |) ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_function_instantiation_at :
      M.IsAssociatedFunction Self "function_instantiation_at" function_instantiation_at.
    
    (*
        pub fn field_instantiation_at(&self, idx: FieldInstantiationIndex) -> &FieldInstantiation {
            &self.field_instantiations[idx.into_index()]
        }
    *)
    Definition field_instantiation_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::ops::index::Index",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::FieldInstantiation";
                  Ty.path "alloc::alloc::Global"
                ],
              [ Ty.path "usize" ],
              "index",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "field_instantiations"
              |);
              M.call_closure (|
                M.get_trait_method (|
                  "move_binary_format::internals::ModuleIndex",
                  Ty.path "move_binary_format::file_format::FieldInstantiationIndex",
                  [],
                  "into_index",
                  []
                |),
                [ M.read (| idx |) ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_field_instantiation_at :
      M.IsAssociatedFunction Self "field_instantiation_at" field_instantiation_at.
    
    (*
        pub fn signature_at(&self, idx: SignatureIndex) -> &Signature {
            &self.signatures[idx.into_index()]
        }
    *)
    Definition signature_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::ops::index::Index",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::Signature";
                  Ty.path "alloc::alloc::Global"
                ],
              [ Ty.path "usize" ],
              "index",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "signatures"
              |);
              M.call_closure (|
                M.get_trait_method (|
                  "move_binary_format::internals::ModuleIndex",
                  Ty.path "move_binary_format::file_format::SignatureIndex",
                  [],
                  "into_index",
                  []
                |),
                [ M.read (| idx |) ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_signature_at : M.IsAssociatedFunction Self "signature_at" signature_at.
    
    (*
        pub fn identifier_at(&self, idx: IdentifierIndex) -> &IdentStr {
            &self.identifiers[idx.into_index()]
        }
    *)
    Definition identifier_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::ops::deref::Deref",
              Ty.path "move_core_types::identifier::Identifier",
              [],
              "deref",
              []
            |),
            [
              M.call_closure (|
                M.get_trait_method (|
                  "core::ops::index::Index",
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_core_types::identifier::Identifier";
                      Ty.path "alloc::alloc::Global"
                    ],
                  [ Ty.path "usize" ],
                  "index",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    M.read (| self |),
                    "move_binary_format::file_format::CompiledModule",
                    "identifiers"
                  |);
                  M.call_closure (|
                    M.get_trait_method (|
                      "move_binary_format::internals::ModuleIndex",
                      Ty.path "move_binary_format::file_format::IdentifierIndex",
                      [],
                      "into_index",
                      []
                    |),
                    [ M.read (| idx |) ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_identifier_at :
      M.IsAssociatedFunction Self "identifier_at" identifier_at.
    
    (*
        pub fn address_identifier_at(&self, idx: AddressIdentifierIndex) -> &AccountAddress {
            &self.address_identifiers[idx.into_index()]
        }
    *)
    Definition address_identifier_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::ops::index::Index",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_core_types::account_address::AccountAddress";
                  Ty.path "alloc::alloc::Global"
                ],
              [ Ty.path "usize" ],
              "index",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "address_identifiers"
              |);
              M.call_closure (|
                M.get_trait_method (|
                  "move_binary_format::internals::ModuleIndex",
                  Ty.path "move_binary_format::file_format::AddressIdentifierIndex",
                  [],
                  "into_index",
                  []
                |),
                [ M.read (| idx |) ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_address_identifier_at :
      M.IsAssociatedFunction Self "address_identifier_at" address_identifier_at.
    
    (*
        pub fn constant_at(&self, idx: ConstantPoolIndex) -> &Constant {
            &self.constant_pool[idx.into_index()]
        }
    *)
    Definition constant_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::ops::index::Index",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::Constant";
                  Ty.path "alloc::alloc::Global"
                ],
              [ Ty.path "usize" ],
              "index",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "constant_pool"
              |);
              M.call_closure (|
                M.get_trait_method (|
                  "move_binary_format::internals::ModuleIndex",
                  Ty.path "move_binary_format::file_format::ConstantPoolIndex",
                  [],
                  "into_index",
                  []
                |),
                [ M.read (| idx |) ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_constant_at : M.IsAssociatedFunction Self "constant_at" constant_at.
    
    (*
        pub fn struct_def_at(&self, idx: StructDefinitionIndex) -> &StructDefinition {
            &self.struct_defs[idx.into_index()]
        }
    *)
    Definition struct_def_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::ops::index::Index",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::StructDefinition";
                  Ty.path "alloc::alloc::Global"
                ],
              [ Ty.path "usize" ],
              "index",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "struct_defs"
              |);
              M.call_closure (|
                M.get_trait_method (|
                  "move_binary_format::internals::ModuleIndex",
                  Ty.path "move_binary_format::file_format::StructDefinitionIndex",
                  [],
                  "into_index",
                  []
                |),
                [ M.read (| idx |) ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_struct_def_at :
      M.IsAssociatedFunction Self "struct_def_at" struct_def_at.
    
    (*
        pub fn function_def_at(&self, idx: FunctionDefinitionIndex) -> &FunctionDefinition {
            let result = &self.function_defs[idx.into_index()];
            debug_assert!(result.function.into_index() < self.function_handles().len()); // invariant
            debug_assert!(match &result.code {
                Some(code) => code.locals.into_index() < self.signatures().len(),
                None => true,
            }); // invariant
            result
        }
    *)
    Definition function_def_at (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.read (|
            let~ result :=
              M.alloc (|
                M.call_closure (|
                  M.get_trait_method (|
                    "core::ops::index::Index",
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_binary_format::file_format::FunctionDefinition";
                        Ty.path "alloc::alloc::Global"
                      ],
                    [ Ty.path "usize" ],
                    "index",
                    []
                  |),
                  [
                    M.SubPointer.get_struct_record_field (|
                      M.read (| self |),
                      "move_binary_format::file_format::CompiledModule",
                      "function_defs"
                    |);
                    M.call_closure (|
                      M.get_trait_method (|
                        "move_binary_format::internals::ModuleIndex",
                        Ty.path "move_binary_format::file_format::FunctionDefinitionIndex",
                        [],
                        "into_index",
                        []
                      |),
                      [ M.read (| idx |) ]
                    |)
                  ]
                |)
              |) in
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        BinOp.lt (|
                                          M.call_closure (|
                                            M.get_trait_method (|
                                              "move_binary_format::internals::ModuleIndex",
                                              Ty.path
                                                "move_binary_format::file_format::FunctionHandleIndex",
                                              [],
                                              "into_index",
                                              []
                                            |),
                                            [
                                              M.read (|
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| result |),
                                                  "move_binary_format::file_format::FunctionDefinition",
                                                  "function"
                                                |)
                                              |)
                                            ]
                                          |),
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.apply
                                                (Ty.path "slice")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::FunctionHandle"
                                                ],
                                              "len",
                                              []
                                            |),
                                            [
                                              M.call_closure (|
                                                M.get_associated_function (|
                                                  Ty.path
                                                    "move_binary_format::file_format::CompiledModule",
                                                  "function_handles",
                                                  []
                                                |),
                                                [ M.read (| self |) ]
                                              |)
                                            ]
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: result.function.into_index() < self.function_handles().len()"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            let~ _ :=
              M.match_operator (|
                M.alloc (| Value.Tuple [] |),
                [
                  fun γ =>
                    ltac:(M.monadic
                      (let γ := M.use (M.alloc (| Value.Bool true |)) in
                      let _ := M.is_constant_or_break_match (| M.read (| γ |), Value.Bool true |) in
                      let~ _ :=
                        M.match_operator (|
                          M.alloc (| Value.Tuple [] |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ :=
                                  M.use
                                    (M.alloc (|
                                      UnOp.not (|
                                        M.read (|
                                          M.match_operator (|
                                            M.alloc (|
                                              M.SubPointer.get_struct_record_field (|
                                                M.read (| result |),
                                                "move_binary_format::file_format::FunctionDefinition",
                                                "code"
                                              |)
                                            |),
                                            [
                                              fun γ =>
                                                ltac:(M.monadic
                                                  (let γ := M.read (| γ |) in
                                                  let γ1_0 :=
                                                    M.SubPointer.get_struct_tuple_field (|
                                                      γ,
                                                      "core::option::Option::Some",
                                                      0
                                                    |) in
                                                  let code := M.alloc (| γ1_0 |) in
                                                  M.alloc (|
                                                    BinOp.lt (|
                                                      M.call_closure (|
                                                        M.get_trait_method (|
                                                          "move_binary_format::internals::ModuleIndex",
                                                          Ty.path
                                                            "move_binary_format::file_format::SignatureIndex",
                                                          [],
                                                          "into_index",
                                                          []
                                                        |),
                                                        [
                                                          M.read (|
                                                            M.SubPointer.get_struct_record_field (|
                                                              M.read (| code |),
                                                              "move_binary_format::file_format::CodeUnit",
                                                              "locals"
                                                            |)
                                                          |)
                                                        ]
                                                      |),
                                                      M.call_closure (|
                                                        M.get_associated_function (|
                                                          Ty.apply
                                                            (Ty.path "slice")
                                                            []
                                                            [
                                                              Ty.path
                                                                "move_binary_format::file_format::Signature"
                                                            ],
                                                          "len",
                                                          []
                                                        |),
                                                        [
                                                          M.call_closure (|
                                                            M.get_associated_function (|
                                                              Ty.path
                                                                "move_binary_format::file_format::CompiledModule",
                                                              "signatures",
                                                              []
                                                            |),
                                                            [ M.read (| self |) ]
                                                          |)
                                                        ]
                                                      |)
                                                    |)
                                                  |)));
                                              fun γ =>
                                                ltac:(M.monadic
                                                  (let γ := M.read (| γ |) in
                                                  let _ :=
                                                    M.is_struct_tuple (|
                                                      γ,
                                                      "core::option::Option::None"
                                                    |) in
                                                  M.alloc (| Value.Bool true |)))
                                            ]
                                          |)
                                        |)
                                      |)
                                    |)) in
                                let _ :=
                                  M.is_constant_or_break_match (|
                                    M.read (| γ |),
                                    Value.Bool true
                                  |) in
                                M.alloc (|
                                  M.never_to_any (|
                                    M.call_closure (|
                                      M.get_function (| "core::panicking::panic", [] |),
                                      [
                                        M.read (|
                                          Value.String
                                            "assertion failed: match &result.code {
    Some(code) => code.locals.into_index() < self.signatures().len(),
    None => true,
}"
                                        |)
                                      ]
                                    |)
                                  |)
                                |)));
                            fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                          ]
                        |) in
                      M.alloc (| Value.Tuple [] |)));
                  fun γ => ltac:(M.monadic (M.alloc (| Value.Tuple [] |)))
                ]
              |) in
            M.alloc (| M.read (| result |) |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_function_def_at :
      M.IsAssociatedFunction Self "function_def_at" function_def_at.
    
    (*
        pub fn module_handles(&self) -> &[ModuleHandle] {
            &self.module_handles
        }
    *)
    Definition module_handles (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::ModuleHandle";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "module_handles"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_module_handles :
      M.IsAssociatedFunction Self "module_handles" module_handles.
    
    (*
        pub fn struct_handles(&self) -> &[StructHandle] {
            &self.struct_handles
        }
    *)
    Definition struct_handles (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::StructHandle";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "struct_handles"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_struct_handles :
      M.IsAssociatedFunction Self "struct_handles" struct_handles.
    
    (*
        pub fn function_handles(&self) -> &[FunctionHandle] {
            &self.function_handles
        }
    *)
    Definition function_handles (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::FunctionHandle";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "function_handles"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_function_handles :
      M.IsAssociatedFunction Self "function_handles" function_handles.
    
    (*
        pub fn field_handles(&self) -> &[FieldHandle] {
            &self.field_handles
        }
    *)
    Definition field_handles (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::FieldHandle";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "field_handles"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_field_handles :
      M.IsAssociatedFunction Self "field_handles" field_handles.
    
    (*
        pub fn struct_instantiations(&self) -> &[StructDefInstantiation] {
            &self.struct_def_instantiations
        }
    *)
    Definition struct_instantiations (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::StructDefInstantiation";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "struct_def_instantiations"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_struct_instantiations :
      M.IsAssociatedFunction Self "struct_instantiations" struct_instantiations.
    
    (*
        pub fn function_instantiations(&self) -> &[FunctionInstantiation] {
            &self.function_instantiations
        }
    *)
    Definition function_instantiations (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::FunctionInstantiation";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "function_instantiations"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_function_instantiations :
      M.IsAssociatedFunction Self "function_instantiations" function_instantiations.
    
    (*
        pub fn field_instantiations(&self) -> &[FieldInstantiation] {
            &self.field_instantiations
        }
    *)
    Definition field_instantiations (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::FieldInstantiation";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "field_instantiations"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_field_instantiations :
      M.IsAssociatedFunction Self "field_instantiations" field_instantiations.
    
    (*
        pub fn signatures(&self) -> &[Signature] {
            &self.signatures
        }
    *)
    Definition signatures (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::Signature";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "signatures"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_signatures : M.IsAssociatedFunction Self "signatures" signatures.
    
    (*
        pub fn constant_pool(&self) -> &[Constant] {
            &self.constant_pool
        }
    *)
    Definition constant_pool (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::Constant";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "constant_pool"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_constant_pool :
      M.IsAssociatedFunction Self "constant_pool" constant_pool.
    
    (*
        pub fn identifiers(&self) -> &[Identifier] {
            &self.identifiers
        }
    *)
    Definition identifiers (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [ Ty.path "move_core_types::identifier::Identifier"; Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "identifiers"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_identifiers : M.IsAssociatedFunction Self "identifiers" identifiers.
    
    (*
        pub fn address_identifiers(&self) -> &[AccountAddress] {
            &self.address_identifiers
        }
    *)
    Definition address_identifiers (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_core_types::account_address::AccountAddress";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "address_identifiers"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_address_identifiers :
      M.IsAssociatedFunction Self "address_identifiers" address_identifiers.
    
    (*
        pub fn struct_defs(&self) -> &[StructDefinition] {
            &self.struct_defs
        }
    *)
    Definition struct_defs (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::StructDefinition";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "struct_defs"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_struct_defs : M.IsAssociatedFunction Self "struct_defs" struct_defs.
    
    (*
        pub fn function_defs(&self) -> &[FunctionDefinition] {
            &self.function_defs
        }
    *)
    Definition function_defs (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::FunctionDefinition";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "function_defs"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_function_defs :
      M.IsAssociatedFunction Self "function_defs" function_defs.
    
    (*
        pub fn friend_decls(&self) -> &[ModuleHandle] {
            &self.friend_decls
        }
    *)
    Definition friend_decls (ε : 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::deref::Deref",
              Ty.apply
                (Ty.path "alloc::vec::Vec")
                []
                [
                  Ty.path "move_binary_format::file_format::ModuleHandle";
                  Ty.path "alloc::alloc::Global"
                ],
              [],
              "deref",
              []
            |),
            [
              M.SubPointer.get_struct_record_field (|
                M.read (| self |),
                "move_binary_format::file_format::CompiledModule",
                "friend_decls"
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_friend_decls : M.IsAssociatedFunction Self "friend_decls" friend_decls.
    
    (*
        pub fn version(&self) -> u32 {
            self.version
        }
    *)
    Definition version (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            M.SubPointer.get_struct_record_field (|
              M.read (| self |),
              "move_binary_format::file_format::CompiledModule",
              "version"
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_version : M.IsAssociatedFunction Self "version" version.
    
    (*
        pub fn immediate_dependencies(&self) -> Vec<ModuleId> {
            let self_handle = self.self_handle();
            self.module_handles()
                .iter()
                .filter(|&handle| handle != self_handle)
                .map(|handle| self.module_id_for_handle(handle))
                .collect()
        }
    *)
    Definition immediate_dependencies (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          M.read (|
            let~ self_handle :=
              M.alloc (|
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.path "move_binary_format::file_format::CompiledModule",
                    "self_handle",
                    []
                  |),
                  [ M.read (| self |) ]
                |)
              |) in
            M.alloc (|
              M.call_closure (|
                M.get_trait_method (|
                  "core::iter::traits::iterator::Iterator",
                  Ty.apply
                    (Ty.path "core::iter::adapters::map::Map")
                    []
                    [
                      Ty.apply
                        (Ty.path "core::iter::adapters::filter::Filter")
                        []
                        [
                          Ty.apply
                            (Ty.path "core::slice::iter::Iter")
                            []
                            [ Ty.path "move_binary_format::file_format::ModuleHandle" ];
                          Ty.function
                            [
                              Ty.tuple
                                [
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.apply
                                        (Ty.path "&")
                                        []
                                        [ Ty.path "move_binary_format::file_format::ModuleHandle" ]
                                    ]
                                ]
                            ]
                            (Ty.path "bool")
                        ];
                      Ty.function
                        [
                          Ty.tuple
                            [
                              Ty.apply
                                (Ty.path "&")
                                []
                                [ Ty.path "move_binary_format::file_format::ModuleHandle" ]
                            ]
                        ]
                        (Ty.path "move_core_types::language_storage::ModuleId")
                    ],
                  [],
                  "collect",
                  [
                    Ty.apply
                      (Ty.path "alloc::vec::Vec")
                      []
                      [
                        Ty.path "move_core_types::language_storage::ModuleId";
                        Ty.path "alloc::alloc::Global"
                      ]
                  ]
                |),
                [
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::iter::traits::iterator::Iterator",
                      Ty.apply
                        (Ty.path "core::iter::adapters::filter::Filter")
                        []
                        [
                          Ty.apply
                            (Ty.path "core::slice::iter::Iter")
                            []
                            [ Ty.path "move_binary_format::file_format::ModuleHandle" ];
                          Ty.function
                            [
                              Ty.tuple
                                [
                                  Ty.apply
                                    (Ty.path "&")
                                    []
                                    [
                                      Ty.apply
                                        (Ty.path "&")
                                        []
                                        [ Ty.path "move_binary_format::file_format::ModuleHandle" ]
                                    ]
                                ]
                            ]
                            (Ty.path "bool")
                        ],
                      [],
                      "map",
                      [
                        Ty.path "move_core_types::language_storage::ModuleId";
                        Ty.function
                          [
                            Ty.tuple
                              [
                                Ty.apply
                                  (Ty.path "&")
                                  []
                                  [ Ty.path "move_binary_format::file_format::ModuleHandle" ]
                              ]
                          ]
                          (Ty.path "move_core_types::language_storage::ModuleId")
                      ]
                    |),
                    [
                      M.call_closure (|
                        M.get_trait_method (|
                          "core::iter::traits::iterator::Iterator",
                          Ty.apply
                            (Ty.path "core::slice::iter::Iter")
                            []
                            [ Ty.path "move_binary_format::file_format::ModuleHandle" ],
                          [],
                          "filter",
                          [
                            Ty.function
                              [
                                Ty.tuple
                                  [
                                    Ty.apply
                                      (Ty.path "&")
                                      []
                                      [
                                        Ty.apply
                                          (Ty.path "&")
                                          []
                                          [ Ty.path "move_binary_format::file_format::ModuleHandle"
                                          ]
                                      ]
                                  ]
                              ]
                              (Ty.path "bool")
                          ]
                        |),
                        [
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.apply
                                (Ty.path "slice")
                                []
                                [ Ty.path "move_binary_format::file_format::ModuleHandle" ],
                              "iter",
                              []
                            |),
                            [
                              M.call_closure (|
                                M.get_associated_function (|
                                  Ty.path "move_binary_format::file_format::CompiledModule",
                                  "module_handles",
                                  []
                                |),
                                [ M.read (| self |) ]
                              |)
                            ]
                          |);
                          M.closure
                            (fun γ =>
                              ltac:(M.monadic
                                match γ with
                                | [ α0 ] =>
                                  ltac:(M.monadic
                                    (M.match_operator (|
                                      M.alloc (| α0 |),
                                      [
                                        fun γ =>
                                          ltac:(M.monadic
                                            (let γ := M.read (| γ |) in
                                            let handle := M.copy (| γ |) in
                                            M.call_closure (|
                                              M.get_trait_method (|
                                                "core::cmp::PartialEq",
                                                Ty.apply
                                                  (Ty.path "&")
                                                  []
                                                  [
                                                    Ty.path
                                                      "move_binary_format::file_format::ModuleHandle"
                                                  ],
                                                [
                                                  Ty.apply
                                                    (Ty.path "&")
                                                    []
                                                    [
                                                      Ty.path
                                                        "move_binary_format::file_format::ModuleHandle"
                                                    ]
                                                ],
                                                "ne",
                                                []
                                              |),
                                              [ handle; self_handle ]
                                            |)))
                                      ]
                                    |)))
                                | _ => M.impossible "wrong number of arguments"
                                end))
                        ]
                      |);
                      M.closure
                        (fun γ =>
                          ltac:(M.monadic
                            match γ with
                            | [ α0 ] =>
                              ltac:(M.monadic
                                (M.match_operator (|
                                  M.alloc (| α0 |),
                                  [
                                    fun γ =>
                                      ltac:(M.monadic
                                        (let handle := M.copy (| γ |) in
                                        M.call_closure (|
                                          M.get_associated_function (|
                                            Ty.path
                                              "move_binary_format::file_format::CompiledModule",
                                            "module_id_for_handle",
                                            []
                                          |),
                                          [ M.read (| self |); M.read (| handle |) ]
                                        |)))
                                  ]
                                |)))
                            | _ => M.impossible "wrong number of arguments"
                            end))
                    ]
                  |)
                ]
              |)
            |)
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_immediate_dependencies :
      M.IsAssociatedFunction Self "immediate_dependencies" immediate_dependencies.
    
    (*
        pub fn immediate_friends(&self) -> Vec<ModuleId> {
            self.friend_decls()
                .iter()
                .map(|handle| self.module_id_for_handle(handle))
                .collect()
        }
    *)
    Definition immediate_friends (ε : 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::iter::traits::iterator::Iterator",
              Ty.apply
                (Ty.path "core::iter::adapters::map::Map")
                []
                [
                  Ty.apply
                    (Ty.path "core::slice::iter::Iter")
                    []
                    [ Ty.path "move_binary_format::file_format::ModuleHandle" ];
                  Ty.function
                    [
                      Ty.tuple
                        [
                          Ty.apply
                            (Ty.path "&")
                            []
                            [ Ty.path "move_binary_format::file_format::ModuleHandle" ]
                        ]
                    ]
                    (Ty.path "move_core_types::language_storage::ModuleId")
                ],
              [],
              "collect",
              [
                Ty.apply
                  (Ty.path "alloc::vec::Vec")
                  []
                  [
                    Ty.path "move_core_types::language_storage::ModuleId";
                    Ty.path "alloc::alloc::Global"
                  ]
              ]
            |),
            [
              M.call_closure (|
                M.get_trait_method (|
                  "core::iter::traits::iterator::Iterator",
                  Ty.apply
                    (Ty.path "core::slice::iter::Iter")
                    []
                    [ Ty.path "move_binary_format::file_format::ModuleHandle" ],
                  [],
                  "map",
                  [
                    Ty.path "move_core_types::language_storage::ModuleId";
                    Ty.function
                      [
                        Ty.tuple
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [ Ty.path "move_binary_format::file_format::ModuleHandle" ]
                          ]
                      ]
                      (Ty.path "move_core_types::language_storage::ModuleId")
                  ]
                |),
                [
                  M.call_closure (|
                    M.get_associated_function (|
                      Ty.apply
                        (Ty.path "slice")
                        []
                        [ Ty.path "move_binary_format::file_format::ModuleHandle" ],
                      "iter",
                      []
                    |),
                    [
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "move_binary_format::file_format::CompiledModule",
                          "friend_decls",
                          []
                        |),
                        [ M.read (| self |) ]
                      |)
                    ]
                  |);
                  M.closure
                    (fun γ =>
                      ltac:(M.monadic
                        match γ with
                        | [ α0 ] =>
                          ltac:(M.monadic
                            (M.match_operator (|
                              M.alloc (| α0 |),
                              [
                                fun γ =>
                                  ltac:(M.monadic
                                    (let handle := M.copy (| γ |) in
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "move_binary_format::file_format::CompiledModule",
                                        "module_id_for_handle",
                                        []
                                      |),
                                      [ M.read (| self |); M.read (| handle |) ]
                                    |)))
                              ]
                            |)))
                        | _ => M.impossible "wrong number of arguments"
                        end))
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_immediate_friends :
      M.IsAssociatedFunction Self "immediate_friends" immediate_friends.
    
    (*
        pub fn find_struct_def(&self, idx: StructHandleIndex) -> Option<&StructDefinition> {
            self.struct_defs().iter().find(|d| d.struct_handle == idx)
        }
    *)
    Definition find_struct_def (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; idx ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let idx := M.alloc (| idx |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::iter::traits::iterator::Iterator",
              Ty.apply
                (Ty.path "core::slice::iter::Iter")
                []
                [ Ty.path "move_binary_format::file_format::StructDefinition" ],
              [],
              "find",
              [
                Ty.function
                  [
                    Ty.tuple
                      [
                        Ty.apply
                          (Ty.path "&")
                          []
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [ Ty.path "move_binary_format::file_format::StructDefinition" ]
                          ]
                      ]
                  ]
                  (Ty.path "bool")
              ]
            |),
            [
              M.alloc (|
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.apply
                      (Ty.path "slice")
                      []
                      [ Ty.path "move_binary_format::file_format::StructDefinition" ],
                    "iter",
                    []
                  |),
                  [
                    M.call_closure (|
                      M.get_associated_function (|
                        Ty.path "move_binary_format::file_format::CompiledModule",
                        "struct_defs",
                        []
                      |),
                      [ M.read (| self |) ]
                    |)
                  ]
                |)
              |);
              M.closure
                (fun γ =>
                  ltac:(M.monadic
                    match γ with
                    | [ α0 ] =>
                      ltac:(M.monadic
                        (M.match_operator (|
                          M.alloc (| α0 |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let d := M.copy (| γ |) in
                                M.call_closure (|
                                  M.get_trait_method (|
                                    "core::cmp::PartialEq",
                                    Ty.path "move_binary_format::file_format::StructHandleIndex",
                                    [ Ty.path "move_binary_format::file_format::StructHandleIndex"
                                    ],
                                    "eq",
                                    []
                                  |),
                                  [
                                    M.SubPointer.get_struct_record_field (|
                                      M.read (| M.read (| d |) |),
                                      "move_binary_format::file_format::StructDefinition",
                                      "struct_handle"
                                    |);
                                    idx
                                  ]
                                |)))
                          ]
                        |)))
                    | _ => M.impossible "wrong number of arguments"
                    end))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_find_struct_def :
      M.IsAssociatedFunction Self "find_struct_def" find_struct_def.
    
    (*
        pub fn find_struct_def_by_name(&self, name: &IdentStr) -> Option<&StructDefinition> {
            self.struct_defs().iter().find(|def| {
                let handle = self.struct_handle_at(def.struct_handle);
                name == self.identifier_at(handle.name)
            })
        }
    *)
    Definition find_struct_def_by_name (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; name ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let name := M.alloc (| name |) in
          M.call_closure (|
            M.get_trait_method (|
              "core::iter::traits::iterator::Iterator",
              Ty.apply
                (Ty.path "core::slice::iter::Iter")
                []
                [ Ty.path "move_binary_format::file_format::StructDefinition" ],
              [],
              "find",
              [
                Ty.function
                  [
                    Ty.tuple
                      [
                        Ty.apply
                          (Ty.path "&")
                          []
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [ Ty.path "move_binary_format::file_format::StructDefinition" ]
                          ]
                      ]
                  ]
                  (Ty.path "bool")
              ]
            |),
            [
              M.alloc (|
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.apply
                      (Ty.path "slice")
                      []
                      [ Ty.path "move_binary_format::file_format::StructDefinition" ],
                    "iter",
                    []
                  |),
                  [
                    M.call_closure (|
                      M.get_associated_function (|
                        Ty.path "move_binary_format::file_format::CompiledModule",
                        "struct_defs",
                        []
                      |),
                      [ M.read (| self |) ]
                    |)
                  ]
                |)
              |);
              M.closure
                (fun γ =>
                  ltac:(M.monadic
                    match γ with
                    | [ α0 ] =>
                      ltac:(M.monadic
                        (M.match_operator (|
                          M.alloc (| α0 |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let def := M.copy (| γ |) in
                                M.read (|
                                  let~ handle :=
                                    M.alloc (|
                                      M.call_closure (|
                                        M.get_associated_function (|
                                          Ty.path "move_binary_format::file_format::CompiledModule",
                                          "struct_handle_at",
                                          []
                                        |),
                                        [
                                          M.read (| self |);
                                          M.read (|
                                            M.SubPointer.get_struct_record_field (|
                                              M.read (| M.read (| def |) |),
                                              "move_binary_format::file_format::StructDefinition",
                                              "struct_handle"
                                            |)
                                          |)
                                        ]
                                      |)
                                    |) in
                                  M.alloc (|
                                    M.call_closure (|
                                      M.get_trait_method (|
                                        "core::cmp::PartialEq",
                                        Ty.apply
                                          (Ty.path "&")
                                          []
                                          [ Ty.path "move_core_types::identifier::IdentStr" ],
                                        [
                                          Ty.apply
                                            (Ty.path "&")
                                            []
                                            [ Ty.path "move_core_types::identifier::IdentStr" ]
                                        ],
                                        "eq",
                                        []
                                      |),
                                      [
                                        name;
                                        M.alloc (|
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.path
                                                "move_binary_format::file_format::CompiledModule",
                                              "identifier_at",
                                              []
                                            |),
                                            [
                                              M.read (| self |);
                                              M.read (|
                                                M.SubPointer.get_struct_record_field (|
                                                  M.read (| handle |),
                                                  "move_binary_format::file_format::StructHandle",
                                                  "name"
                                                |)
                                              |)
                                            ]
                                          |)
                                        |)
                                      ]
                                    |)
                                  |)
                                |)))
                          ]
                        |)))
                    | _ => M.impossible "wrong number of arguments"
                    end))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_find_struct_def_by_name :
      M.IsAssociatedFunction Self "find_struct_def_by_name" find_struct_def_by_name.
    
    (*
        pub fn abilities(
            &self,
            ty: &SignatureToken,
            constraints: &[AbilitySet],
        ) -> PartialVMResult<AbilitySet> {
            use SignatureToken::*;
    
            match ty {
                Bool | U8 | U16 | U32 | U64 | U128 | U256 | Address => Ok(AbilitySet::PRIMITIVES),
    
                Reference(_) | MutableReference(_) => Ok(AbilitySet::REFERENCES),
                Signer => Ok(AbilitySet::SIGNER),
                TypeParameter(idx) => Ok(constraints[*idx as usize]),
                Vector(ty) => AbilitySet::polymorphic_abilities(
                    AbilitySet::VECTOR,
                    vec![false],
                    vec![self.abilities(ty, constraints)?],
                ),
                Struct(idx) => {
                    let sh = self.struct_handle_at( *idx);
                    Ok(sh.abilities)
                }
                StructInstantiation(struct_inst) => {
                    let (idx, type_args) = &**struct_inst;
                    let sh = self.struct_handle_at( *idx);
                    let declared_abilities = sh.abilities;
                    let type_arguments = type_args
                        .iter()
                        .map(|arg| self.abilities(arg, constraints))
                        .collect::<PartialVMResult<Vec<_>>>()?;
                    AbilitySet::polymorphic_abilities(
                        declared_abilities,
                        sh.type_parameters.iter().map(|param| param.is_phantom),
                        type_arguments,
                    )
                }
            }
        }
    *)
    Definition abilities (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; ty; constraints ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let ty := M.alloc (| ty |) in
          let constraints := M.alloc (| constraints |) in
          M.catch_return (|
            ltac:(M.monadic
              (M.read (|
                M.match_operator (|
                  ty,
                  [
                    fun γ =>
                      ltac:(M.monadic
                        (M.find_or_pattern (|
                          γ,
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let _ :=
                                  M.is_struct_tuple (|
                                    γ,
                                    "move_binary_format::file_format::SignatureToken::Bool"
                                  |) in
                                Value.Tuple []));
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let _ :=
                                  M.is_struct_tuple (|
                                    γ,
                                    "move_binary_format::file_format::SignatureToken::U8"
                                  |) in
                                Value.Tuple []));
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let _ :=
                                  M.is_struct_tuple (|
                                    γ,
                                    "move_binary_format::file_format::SignatureToken::U16"
                                  |) in
                                Value.Tuple []));
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let _ :=
                                  M.is_struct_tuple (|
                                    γ,
                                    "move_binary_format::file_format::SignatureToken::U32"
                                  |) in
                                Value.Tuple []));
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let _ :=
                                  M.is_struct_tuple (|
                                    γ,
                                    "move_binary_format::file_format::SignatureToken::U64"
                                  |) in
                                Value.Tuple []));
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let _ :=
                                  M.is_struct_tuple (|
                                    γ,
                                    "move_binary_format::file_format::SignatureToken::U128"
                                  |) in
                                Value.Tuple []));
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let _ :=
                                  M.is_struct_tuple (|
                                    γ,
                                    "move_binary_format::file_format::SignatureToken::U256"
                                  |) in
                                Value.Tuple []));
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let _ :=
                                  M.is_struct_tuple (|
                                    γ,
                                    "move_binary_format::file_format::SignatureToken::Address"
                                  |) in
                                Value.Tuple []))
                          ],
                          M.closure
                            (fun γ =>
                              ltac:(M.monadic
                                match γ with
                                | [] =>
                                  ltac:(M.monadic
                                    (M.alloc (|
                                      Value.StructTuple
                                        "core::result::Result::Ok"
                                        [
                                          M.read (|
                                            M.get_constant (|
                                              "move_binary_format::file_format::PRIMITIVES"
                                            |)
                                          |)
                                        ]
                                    |)))
                                | _ => M.impossible "wrong number of arguments"
                                end))
                        |)));
                    fun γ =>
                      ltac:(M.monadic
                        (M.find_or_pattern (|
                          γ,
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let γ1_0 :=
                                  M.SubPointer.get_struct_tuple_field (|
                                    γ,
                                    "move_binary_format::file_format::SignatureToken::Reference",
                                    0
                                  |) in
                                Value.Tuple []));
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let γ1_0 :=
                                  M.SubPointer.get_struct_tuple_field (|
                                    γ,
                                    "move_binary_format::file_format::SignatureToken::MutableReference",
                                    0
                                  |) in
                                Value.Tuple []))
                          ],
                          M.closure
                            (fun γ =>
                              ltac:(M.monadic
                                match γ with
                                | [] =>
                                  ltac:(M.monadic
                                    (M.alloc (|
                                      Value.StructTuple
                                        "core::result::Result::Ok"
                                        [
                                          M.read (|
                                            M.get_constant (|
                                              "move_binary_format::file_format::REFERENCES"
                                            |)
                                          |)
                                        ]
                                    |)))
                                | _ => M.impossible "wrong number of arguments"
                                end))
                        |)));
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let _ :=
                          M.is_struct_tuple (|
                            γ,
                            "move_binary_format::file_format::SignatureToken::Signer"
                          |) in
                        M.alloc (|
                          Value.StructTuple
                            "core::result::Result::Ok"
                            [
                              M.read (|
                                M.get_constant (| "move_binary_format::file_format::SIGNER" |)
                              |)
                            ]
                        |)));
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let γ1_0 :=
                          M.SubPointer.get_struct_tuple_field (|
                            γ,
                            "move_binary_format::file_format::SignatureToken::TypeParameter",
                            0
                          |) in
                        let idx := M.alloc (| γ1_0 |) in
                        M.alloc (|
                          Value.StructTuple
                            "core::result::Result::Ok"
                            [
                              M.read (|
                                M.SubPointer.get_array_field (|
                                  M.read (| constraints |),
                                  M.alloc (| M.rust_cast (M.read (| M.read (| idx |) |)) |)
                                |)
                              |)
                            ]
                        |)));
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let γ1_0 :=
                          M.SubPointer.get_struct_tuple_field (|
                            γ,
                            "move_binary_format::file_format::SignatureToken::Vector",
                            0
                          |) in
                        let ty := M.alloc (| γ1_0 |) in
                        M.alloc (|
                          M.call_closure (|
                            M.get_associated_function (|
                              Ty.path "move_binary_format::file_format::AbilitySet",
                              "polymorphic_abilities",
                              [
                                Ty.apply
                                  (Ty.path "alloc::vec::Vec")
                                  []
                                  [ Ty.path "bool"; Ty.path "alloc::alloc::Global" ];
                                Ty.apply
                                  (Ty.path "alloc::vec::Vec")
                                  []
                                  [
                                    Ty.path "move_binary_format::file_format::AbilitySet";
                                    Ty.path "alloc::alloc::Global"
                                  ]
                              ]
                            |),
                            [
                              M.read (|
                                M.get_constant (| "move_binary_format::file_format::VECTOR" |)
                              |);
                              M.call_closure (|
                                M.get_associated_function (|
                                  Ty.apply (Ty.path "slice") [] [ Ty.path "bool" ],
                                  "into_vec",
                                  [ Ty.path "alloc::alloc::Global" ]
                                |),
                                [
                                  M.read (|
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.apply
                                          (Ty.path "alloc::boxed::Box")
                                          []
                                          [
                                            Ty.apply
                                              (Ty.path "array")
                                              [ Value.Integer IntegerKind.Usize 1 ]
                                              [ Ty.path "bool" ];
                                            Ty.path "alloc::alloc::Global"
                                          ],
                                        "new",
                                        []
                                      |),
                                      [ M.alloc (| Value.Array [ Value.Bool false ] |) ]
                                    |)
                                  |)
                                ]
                              |);
                              M.call_closure (|
                                M.get_associated_function (|
                                  Ty.apply
                                    (Ty.path "slice")
                                    []
                                    [ Ty.path "move_binary_format::file_format::AbilitySet" ],
                                  "into_vec",
                                  [ Ty.path "alloc::alloc::Global" ]
                                |),
                                [
                                  M.read (|
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.apply
                                          (Ty.path "alloc::boxed::Box")
                                          []
                                          [
                                            Ty.apply
                                              (Ty.path "array")
                                              [ Value.Integer IntegerKind.Usize 1 ]
                                              [
                                                Ty.path
                                                  "move_binary_format::file_format::AbilitySet"
                                              ];
                                            Ty.path "alloc::alloc::Global"
                                          ],
                                        "new",
                                        []
                                      |),
                                      [
                                        M.alloc (|
                                          Value.Array
                                            [
                                              M.read (|
                                                M.match_operator (|
                                                  M.alloc (|
                                                    M.call_closure (|
                                                      M.get_trait_method (|
                                                        "core::ops::try_trait::Try",
                                                        Ty.apply
                                                          (Ty.path "core::result::Result")
                                                          []
                                                          [
                                                            Ty.path
                                                              "move_binary_format::file_format::AbilitySet";
                                                            Ty.path
                                                              "move_binary_format::errors::PartialVMError"
                                                          ],
                                                        [],
                                                        "branch",
                                                        []
                                                      |),
                                                      [
                                                        M.call_closure (|
                                                          M.get_associated_function (|
                                                            Ty.path
                                                              "move_binary_format::file_format::CompiledModule",
                                                            "abilities",
                                                            []
                                                          |),
                                                          [
                                                            M.read (| self |);
                                                            M.read (| M.read (| ty |) |);
                                                            M.read (| constraints |)
                                                          ]
                                                        |)
                                                      ]
                                                    |)
                                                  |),
                                                  [
                                                    fun γ =>
                                                      ltac:(M.monadic
                                                        (let γ0_0 :=
                                                          M.SubPointer.get_struct_tuple_field (|
                                                            γ,
                                                            "core::ops::control_flow::ControlFlow::Break",
                                                            0
                                                          |) in
                                                        let residual := M.copy (| γ0_0 |) in
                                                        M.alloc (|
                                                          M.never_to_any (|
                                                            M.read (|
                                                              M.return_ (|
                                                                M.call_closure (|
                                                                  M.get_trait_method (|
                                                                    "core::ops::try_trait::FromResidual",
                                                                    Ty.apply
                                                                      (Ty.path
                                                                        "core::result::Result")
                                                                      []
                                                                      [
                                                                        Ty.path
                                                                          "move_binary_format::file_format::AbilitySet";
                                                                        Ty.path
                                                                          "move_binary_format::errors::PartialVMError"
                                                                      ],
                                                                    [
                                                                      Ty.apply
                                                                        (Ty.path
                                                                          "core::result::Result")
                                                                        []
                                                                        [
                                                                          Ty.path
                                                                            "core::convert::Infallible";
                                                                          Ty.path
                                                                            "move_binary_format::errors::PartialVMError"
                                                                        ]
                                                                    ],
                                                                    "from_residual",
                                                                    []
                                                                  |),
                                                                  [ M.read (| residual |) ]
                                                                |)
                                                              |)
                                                            |)
                                                          |)
                                                        |)));
                                                    fun γ =>
                                                      ltac:(M.monadic
                                                        (let γ0_0 :=
                                                          M.SubPointer.get_struct_tuple_field (|
                                                            γ,
                                                            "core::ops::control_flow::ControlFlow::Continue",
                                                            0
                                                          |) in
                                                        let val := M.copy (| γ0_0 |) in
                                                        val))
                                                  ]
                                                |)
                                              |)
                                            ]
                                        |)
                                      ]
                                    |)
                                  |)
                                ]
                              |)
                            ]
                          |)
                        |)));
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let γ1_0 :=
                          M.SubPointer.get_struct_tuple_field (|
                            γ,
                            "move_binary_format::file_format::SignatureToken::Struct",
                            0
                          |) in
                        let idx := M.alloc (| γ1_0 |) in
                        let~ sh :=
                          M.alloc (|
                            M.call_closure (|
                              M.get_associated_function (|
                                Ty.path "move_binary_format::file_format::CompiledModule",
                                "struct_handle_at",
                                []
                              |),
                              [ M.read (| self |); M.read (| M.read (| idx |) |) ]
                            |)
                          |) in
                        M.alloc (|
                          Value.StructTuple
                            "core::result::Result::Ok"
                            [
                              M.read (|
                                M.SubPointer.get_struct_record_field (|
                                  M.read (| sh |),
                                  "move_binary_format::file_format::StructHandle",
                                  "abilities"
                                |)
                              |)
                            ]
                        |)));
                    fun γ =>
                      ltac:(M.monadic
                        (let γ := M.read (| γ |) in
                        let γ1_0 :=
                          M.SubPointer.get_struct_tuple_field (|
                            γ,
                            "move_binary_format::file_format::SignatureToken::StructInstantiation",
                            0
                          |) in
                        let struct_inst := M.alloc (| γ1_0 |) in
                        M.match_operator (|
                          M.alloc (| M.read (| M.read (| struct_inst |) |) |),
                          [
                            fun γ =>
                              ltac:(M.monadic
                                (let γ := M.read (| γ |) in
                                let γ1_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                                let γ1_1 := M.SubPointer.get_tuple_field (| γ, 1 |) in
                                let idx := M.alloc (| γ1_0 |) in
                                let type_args := M.alloc (| γ1_1 |) in
                                let~ sh :=
                                  M.alloc (|
                                    M.call_closure (|
                                      M.get_associated_function (|
                                        Ty.path "move_binary_format::file_format::CompiledModule",
                                        "struct_handle_at",
                                        []
                                      |),
                                      [ M.read (| self |); M.read (| M.read (| idx |) |) ]
                                    |)
                                  |) in
                                let~ declared_abilities :=
                                  M.copy (|
                                    M.SubPointer.get_struct_record_field (|
                                      M.read (| sh |),
                                      "move_binary_format::file_format::StructHandle",
                                      "abilities"
                                    |)
                                  |) in
                                let~ type_arguments :=
                                  M.copy (|
                                    M.match_operator (|
                                      M.alloc (|
                                        M.call_closure (|
                                          M.get_trait_method (|
                                            "core::ops::try_trait::Try",
                                            Ty.apply
                                              (Ty.path "core::result::Result")
                                              []
                                              [
                                                Ty.apply
                                                  (Ty.path "alloc::vec::Vec")
                                                  []
                                                  [
                                                    Ty.path
                                                      "move_binary_format::file_format::AbilitySet";
                                                    Ty.path "alloc::alloc::Global"
                                                  ];
                                                Ty.path "move_binary_format::errors::PartialVMError"
                                              ],
                                            [],
                                            "branch",
                                            []
                                          |),
                                          [
                                            M.call_closure (|
                                              M.get_trait_method (|
                                                "core::iter::traits::iterator::Iterator",
                                                Ty.apply
                                                  (Ty.path "core::iter::adapters::map::Map")
                                                  []
                                                  [
                                                    Ty.apply
                                                      (Ty.path "core::slice::iter::Iter")
                                                      []
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::SignatureToken"
                                                      ];
                                                    Ty.function
                                                      [
                                                        Ty.tuple
                                                          [
                                                            Ty.apply
                                                              (Ty.path "&")
                                                              []
                                                              [
                                                                Ty.path
                                                                  "move_binary_format::file_format::SignatureToken"
                                                              ]
                                                          ]
                                                      ]
                                                      (Ty.apply
                                                        (Ty.path "core::result::Result")
                                                        []
                                                        [
                                                          Ty.path
                                                            "move_binary_format::file_format::AbilitySet";
                                                          Ty.path
                                                            "move_binary_format::errors::PartialVMError"
                                                        ])
                                                  ],
                                                [],
                                                "collect",
                                                [
                                                  Ty.apply
                                                    (Ty.path "core::result::Result")
                                                    []
                                                    [
                                                      Ty.apply
                                                        (Ty.path "alloc::vec::Vec")
                                                        []
                                                        [
                                                          Ty.path
                                                            "move_binary_format::file_format::AbilitySet";
                                                          Ty.path "alloc::alloc::Global"
                                                        ];
                                                      Ty.path
                                                        "move_binary_format::errors::PartialVMError"
                                                    ]
                                                ]
                                              |),
                                              [
                                                M.call_closure (|
                                                  M.get_trait_method (|
                                                    "core::iter::traits::iterator::Iterator",
                                                    Ty.apply
                                                      (Ty.path "core::slice::iter::Iter")
                                                      []
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::SignatureToken"
                                                      ],
                                                    [],
                                                    "map",
                                                    [
                                                      Ty.apply
                                                        (Ty.path "core::result::Result")
                                                        []
                                                        [
                                                          Ty.path
                                                            "move_binary_format::file_format::AbilitySet";
                                                          Ty.path
                                                            "move_binary_format::errors::PartialVMError"
                                                        ];
                                                      Ty.function
                                                        [
                                                          Ty.tuple
                                                            [
                                                              Ty.apply
                                                                (Ty.path "&")
                                                                []
                                                                [
                                                                  Ty.path
                                                                    "move_binary_format::file_format::SignatureToken"
                                                                ]
                                                            ]
                                                        ]
                                                        (Ty.apply
                                                          (Ty.path "core::result::Result")
                                                          []
                                                          [
                                                            Ty.path
                                                              "move_binary_format::file_format::AbilitySet";
                                                            Ty.path
                                                              "move_binary_format::errors::PartialVMError"
                                                          ])
                                                    ]
                                                  |),
                                                  [
                                                    M.call_closure (|
                                                      M.get_associated_function (|
                                                        Ty.apply
                                                          (Ty.path "slice")
                                                          []
                                                          [
                                                            Ty.path
                                                              "move_binary_format::file_format::SignatureToken"
                                                          ],
                                                        "iter",
                                                        []
                                                      |),
                                                      [
                                                        M.call_closure (|
                                                          M.get_trait_method (|
                                                            "core::ops::deref::Deref",
                                                            Ty.apply
                                                              (Ty.path "alloc::vec::Vec")
                                                              []
                                                              [
                                                                Ty.path
                                                                  "move_binary_format::file_format::SignatureToken";
                                                                Ty.path "alloc::alloc::Global"
                                                              ],
                                                            [],
                                                            "deref",
                                                            []
                                                          |),
                                                          [ M.read (| type_args |) ]
                                                        |)
                                                      ]
                                                    |);
                                                    M.closure
                                                      (fun γ =>
                                                        ltac:(M.monadic
                                                          match γ with
                                                          | [ α0 ] =>
                                                            ltac:(M.monadic
                                                              (M.match_operator (|
                                                                M.alloc (| α0 |),
                                                                [
                                                                  fun γ =>
                                                                    ltac:(M.monadic
                                                                      (let arg := M.copy (| γ |) in
                                                                      M.call_closure (|
                                                                        M.get_associated_function (|
                                                                          Ty.path
                                                                            "move_binary_format::file_format::CompiledModule",
                                                                          "abilities",
                                                                          []
                                                                        |),
                                                                        [
                                                                          M.read (| self |);
                                                                          M.read (| arg |);
                                                                          M.read (| constraints |)
                                                                        ]
                                                                      |)))
                                                                ]
                                                              |)))
                                                          | _ =>
                                                            M.impossible "wrong number of arguments"
                                                          end))
                                                  ]
                                                |)
                                              ]
                                            |)
                                          ]
                                        |)
                                      |),
                                      [
                                        fun γ =>
                                          ltac:(M.monadic
                                            (let γ0_0 :=
                                              M.SubPointer.get_struct_tuple_field (|
                                                γ,
                                                "core::ops::control_flow::ControlFlow::Break",
                                                0
                                              |) in
                                            let residual := M.copy (| γ0_0 |) in
                                            M.alloc (|
                                              M.never_to_any (|
                                                M.read (|
                                                  M.return_ (|
                                                    M.call_closure (|
                                                      M.get_trait_method (|
                                                        "core::ops::try_trait::FromResidual",
                                                        Ty.apply
                                                          (Ty.path "core::result::Result")
                                                          []
                                                          [
                                                            Ty.path
                                                              "move_binary_format::file_format::AbilitySet";
                                                            Ty.path
                                                              "move_binary_format::errors::PartialVMError"
                                                          ],
                                                        [
                                                          Ty.apply
                                                            (Ty.path "core::result::Result")
                                                            []
                                                            [
                                                              Ty.path "core::convert::Infallible";
                                                              Ty.path
                                                                "move_binary_format::errors::PartialVMError"
                                                            ]
                                                        ],
                                                        "from_residual",
                                                        []
                                                      |),
                                                      [ M.read (| residual |) ]
                                                    |)
                                                  |)
                                                |)
                                              |)
                                            |)));
                                        fun γ =>
                                          ltac:(M.monadic
                                            (let γ0_0 :=
                                              M.SubPointer.get_struct_tuple_field (|
                                                γ,
                                                "core::ops::control_flow::ControlFlow::Continue",
                                                0
                                              |) in
                                            let val := M.copy (| γ0_0 |) in
                                            val))
                                      ]
                                    |)
                                  |) in
                                M.alloc (|
                                  M.call_closure (|
                                    M.get_associated_function (|
                                      Ty.path "move_binary_format::file_format::AbilitySet",
                                      "polymorphic_abilities",
                                      [
                                        Ty.apply
                                          (Ty.path "core::iter::adapters::map::Map")
                                          []
                                          [
                                            Ty.apply
                                              (Ty.path "core::slice::iter::Iter")
                                              []
                                              [
                                                Ty.path
                                                  "move_binary_format::file_format::StructTypeParameter"
                                              ];
                                            Ty.function
                                              [
                                                Ty.tuple
                                                  [
                                                    Ty.apply
                                                      (Ty.path "&")
                                                      []
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::StructTypeParameter"
                                                      ]
                                                  ]
                                              ]
                                              (Ty.path "bool")
                                          ];
                                        Ty.apply
                                          (Ty.path "alloc::vec::Vec")
                                          []
                                          [
                                            Ty.path "move_binary_format::file_format::AbilitySet";
                                            Ty.path "alloc::alloc::Global"
                                          ]
                                      ]
                                    |),
                                    [
                                      M.read (| declared_abilities |);
                                      M.call_closure (|
                                        M.get_trait_method (|
                                          "core::iter::traits::iterator::Iterator",
                                          Ty.apply
                                            (Ty.path "core::slice::iter::Iter")
                                            []
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::StructTypeParameter"
                                            ],
                                          [],
                                          "map",
                                          [
                                            Ty.path "bool";
                                            Ty.function
                                              [
                                                Ty.tuple
                                                  [
                                                    Ty.apply
                                                      (Ty.path "&")
                                                      []
                                                      [
                                                        Ty.path
                                                          "move_binary_format::file_format::StructTypeParameter"
                                                      ]
                                                  ]
                                              ]
                                              (Ty.path "bool")
                                          ]
                                        |),
                                        [
                                          M.call_closure (|
                                            M.get_associated_function (|
                                              Ty.apply
                                                (Ty.path "slice")
                                                []
                                                [
                                                  Ty.path
                                                    "move_binary_format::file_format::StructTypeParameter"
                                                ],
                                              "iter",
                                              []
                                            |),
                                            [
                                              M.call_closure (|
                                                M.get_trait_method (|
                                                  "core::ops::deref::Deref",
                                                  Ty.apply
                                                    (Ty.path "alloc::vec::Vec")
                                                    []
                                                    [
                                                      Ty.path
                                                        "move_binary_format::file_format::StructTypeParameter";
                                                      Ty.path "alloc::alloc::Global"
                                                    ],
                                                  [],
                                                  "deref",
                                                  []
                                                |),
                                                [
                                                  M.SubPointer.get_struct_record_field (|
                                                    M.read (| sh |),
                                                    "move_binary_format::file_format::StructHandle",
                                                    "type_parameters"
                                                  |)
                                                ]
                                              |)
                                            ]
                                          |);
                                          M.closure
                                            (fun γ =>
                                              ltac:(M.monadic
                                                match γ with
                                                | [ α0 ] =>
                                                  ltac:(M.monadic
                                                    (M.match_operator (|
                                                      M.alloc (| α0 |),
                                                      [
                                                        fun γ =>
                                                          ltac:(M.monadic
                                                            (let param := M.copy (| γ |) in
                                                            M.read (|
                                                              M.SubPointer.get_struct_record_field (|
                                                                M.read (| param |),
                                                                "move_binary_format::file_format::StructTypeParameter",
                                                                "is_phantom"
                                                              |)
                                                            |)))
                                                      ]
                                                    |)))
                                                | _ => M.impossible "wrong number of arguments"
                                                end))
                                        ]
                                      |);
                                      M.read (| type_arguments |)
                                    ]
                                  |)
                                |)))
                          ]
                        |)))
                  ]
                |)
              |)))
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_abilities : M.IsAssociatedFunction Self "abilities" abilities.
    
    (*
        pub fn module_id_for_handle(&self, module_handle: &ModuleHandle) -> ModuleId {
            ModuleId::new(
                *self.address_identifier_at(module_handle.address),
                self.identifier_at(module_handle.name).to_owned(),
            )
        }
    *)
    Definition module_id_for_handle (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; module_handle ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let module_handle := M.alloc (| module_handle |) in
          M.call_closure (|
            M.get_associated_function (|
              Ty.path "move_core_types::language_storage::ModuleId",
              "new",
              []
            |),
            [
              M.read (|
                M.call_closure (|
                  M.get_associated_function (|
                    Ty.path "move_binary_format::file_format::CompiledModule",
                    "address_identifier_at",
                    []
                  |),
                  [
                    M.read (| self |);
                    M.read (|
                      M.SubPointer.get_struct_record_field (|
                        M.read (| module_handle |),
                        "move_binary_format::file_format::ModuleHandle",
                        "address"
                      |)
                    |)
                  ]
                |)
              |);
              M.call_closure (|
                M.get_trait_method (|
                  "alloc::borrow::ToOwned",
                  Ty.path "move_core_types::identifier::IdentStr",
                  [],
                  "to_owned",
                  []
                |),
                [
                  M.call_closure (|
                    M.get_associated_function (|
                      Ty.path "move_binary_format::file_format::CompiledModule",
                      "identifier_at",
                      []
                    |),
                    [
                      M.read (| self |);
                      M.read (|
                        M.SubPointer.get_struct_record_field (|
                          M.read (| module_handle |),
                          "move_binary_format::file_format::ModuleHandle",
                          "name"
                        |)
                      |)
                    ]
                  |)
                ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_module_id_for_handle :
      M.IsAssociatedFunction Self "module_id_for_handle" module_id_for_handle.
    
    (*
        pub fn self_id(&self) -> ModuleId {
            self.module_id_for_handle(self.self_handle())
        }
    *)
    Definition self_id (ε : 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_associated_function (|
              Ty.path "move_binary_format::file_format::CompiledModule",
              "module_id_for_handle",
              []
            |),
            [
              M.read (| self |);
              M.call_closure (|
                M.get_associated_function (|
                  Ty.path "move_binary_format::file_format::CompiledModule",
                  "self_handle",
                  []
                |),
                [ M.read (| self |) ]
              |)
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom AssociatedFunction_self_id : M.IsAssociatedFunction Self "self_id" self_id.
  End Impl_move_binary_format_file_format_CompiledModule.
  
  (*
  pub fn empty_module() -> CompiledModule {
      CompiledModule {
          version: file_format_common::VERSION_MAX,
          module_handles: vec![ModuleHandle {
              address: AddressIdentifierIndex(0),
              name: IdentifierIndex(0),
          }],
          self_module_handle_idx: ModuleHandleIndex(0),
          identifiers: vec![self_module_name().to_owned()],
          address_identifiers: vec![AccountAddress::ZERO],
          constant_pool: vec![],
          metadata: vec![],
          function_defs: vec![],
          struct_defs: vec![],
          struct_handles: vec![],
          function_handles: vec![],
          field_handles: vec![],
          friend_decls: vec![],
          struct_def_instantiations: vec![],
          function_instantiations: vec![],
          field_instantiations: vec![],
          signatures: vec![Signature(vec![])],
      }
  }
  *)
  Definition empty_module (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
    match ε, τ, α with
    | [], [], [] =>
      ltac:(M.monadic
        (Value.StructRecord
          "move_binary_format::file_format::CompiledModule"
          [
            ("version",
              M.read (|
                M.get_constant (| "move_binary_format::file_format_common::VERSION_MAX" |)
              |));
            ("module_handles",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "slice")
                    []
                    [ Ty.path "move_binary_format::file_format::ModuleHandle" ],
                  "into_vec",
                  [ Ty.path "alloc::alloc::Global" ]
                |),
                [
                  M.read (|
                    M.call_closure (|
                      M.get_associated_function (|
                        Ty.apply
                          (Ty.path "alloc::boxed::Box")
                          []
                          [
                            Ty.apply
                              (Ty.path "array")
                              [ Value.Integer IntegerKind.Usize 1 ]
                              [ Ty.path "move_binary_format::file_format::ModuleHandle" ];
                            Ty.path "alloc::alloc::Global"
                          ],
                        "new",
                        []
                      |),
                      [
                        M.alloc (|
                          Value.Array
                            [
                              Value.StructRecord
                                "move_binary_format::file_format::ModuleHandle"
                                [
                                  ("address",
                                    Value.StructTuple
                                      "move_binary_format::file_format::AddressIdentifierIndex"
                                      [ Value.Integer IntegerKind.U16 0 ]);
                                  ("name",
                                    Value.StructTuple
                                      "move_binary_format::file_format::IdentifierIndex"
                                      [ Value.Integer IntegerKind.U16 0 ])
                                ]
                            ]
                        |)
                      ]
                    |)
                  |)
                ]
              |));
            ("self_module_handle_idx",
              Value.StructTuple
                "move_binary_format::file_format::ModuleHandleIndex"
                [ Value.Integer IntegerKind.U16 0 ]);
            ("identifiers",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "slice")
                    []
                    [ Ty.path "move_core_types::identifier::Identifier" ],
                  "into_vec",
                  [ Ty.path "alloc::alloc::Global" ]
                |),
                [
                  M.read (|
                    M.call_closure (|
                      M.get_associated_function (|
                        Ty.apply
                          (Ty.path "alloc::boxed::Box")
                          []
                          [
                            Ty.apply
                              (Ty.path "array")
                              [ Value.Integer IntegerKind.Usize 1 ]
                              [ Ty.path "move_core_types::identifier::Identifier" ];
                            Ty.path "alloc::alloc::Global"
                          ],
                        "new",
                        []
                      |),
                      [
                        M.alloc (|
                          Value.Array
                            [
                              M.call_closure (|
                                M.get_trait_method (|
                                  "alloc::borrow::ToOwned",
                                  Ty.path "move_core_types::identifier::IdentStr",
                                  [],
                                  "to_owned",
                                  []
                                |),
                                [
                                  M.call_closure (|
                                    M.get_function (|
                                      "move_binary_format::file_format::self_module_name",
                                      []
                                    |),
                                    []
                                  |)
                                ]
                              |)
                            ]
                        |)
                      ]
                    |)
                  |)
                ]
              |));
            ("address_identifiers",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "slice")
                    []
                    [ Ty.path "move_core_types::account_address::AccountAddress" ],
                  "into_vec",
                  [ Ty.path "alloc::alloc::Global" ]
                |),
                [
                  M.read (|
                    M.call_closure (|
                      M.get_associated_function (|
                        Ty.apply
                          (Ty.path "alloc::boxed::Box")
                          []
                          [
                            Ty.apply
                              (Ty.path "array")
                              [ Value.Integer IntegerKind.Usize 1 ]
                              [ Ty.path "move_core_types::account_address::AccountAddress" ];
                            Ty.path "alloc::alloc::Global"
                          ],
                        "new",
                        []
                      |),
                      [
                        M.alloc (|
                          Value.Array
                            [
                              M.read (|
                                M.get_constant (| "move_core_types::account_address::ZERO" |)
                              |)
                            ]
                        |)
                      ]
                    |)
                  |)
                ]
              |));
            ("constant_pool",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::Constant";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("metadata",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [ Ty.path "move_core_types::metadata::Metadata"; Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("function_defs",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::FunctionDefinition";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("struct_defs",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::StructDefinition";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("struct_handles",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::StructHandle";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("function_handles",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::FunctionHandle";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("field_handles",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::FieldHandle";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("friend_decls",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::ModuleHandle";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("struct_def_instantiations",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::StructDefInstantiation";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("function_instantiations",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::FunctionInstantiation";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("field_instantiations",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::FieldInstantiation";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "new",
                  []
                |),
                []
              |));
            ("signatures",
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "slice")
                    []
                    [ Ty.path "move_binary_format::file_format::Signature" ],
                  "into_vec",
                  [ Ty.path "alloc::alloc::Global" ]
                |),
                [
                  M.read (|
                    M.call_closure (|
                      M.get_associated_function (|
                        Ty.apply
                          (Ty.path "alloc::boxed::Box")
                          []
                          [
                            Ty.apply
                              (Ty.path "array")
                              [ Value.Integer IntegerKind.Usize 1 ]
                              [ Ty.path "move_binary_format::file_format::Signature" ];
                            Ty.path "alloc::alloc::Global"
                          ],
                        "new",
                        []
                      |),
                      [
                        M.alloc (|
                          Value.Array
                            [
                              Value.StructTuple
                                "move_binary_format::file_format::Signature"
                                [
                                  M.call_closure (|
                                    M.get_associated_function (|
                                      Ty.apply
                                        (Ty.path "alloc::vec::Vec")
                                        []
                                        [
                                          Ty.path "move_binary_format::file_format::SignatureToken";
                                          Ty.path "alloc::alloc::Global"
                                        ],
                                      "new",
                                      []
                                    |),
                                    []
                                  |)
                                ]
                            ]
                        |)
                      ]
                    |)
                  |)
                ]
              |))
          ]))
    | _, _, _ => M.impossible "wrong number of arguments"
    end.
  
  Axiom Function_empty_module :
    M.IsFunction "move_binary_format::file_format::empty_module" empty_module.
  
  (*
  pub fn basic_test_module() -> CompiledModule {
      let mut m = empty_module();
  
      m.function_handles.push(FunctionHandle {
          module: ModuleHandleIndex(0),
          name: IdentifierIndex(m.identifiers.len() as u16),
          parameters: SignatureIndex(0),
          return_: SignatureIndex(0),
          type_parameters: vec![],
      });
      m.identifiers
          .push(Identifier::new("foo".to_string()).unwrap());
  
      m.function_defs.push(FunctionDefinition {
          function: FunctionHandleIndex(0),
          visibility: Visibility::Private,
          is_entry: false,
          acquires_global_resources: vec![],
          code: Some(CodeUnit {
              locals: SignatureIndex(0),
              code: vec![Bytecode::Ret],
          }),
      });
  
      m.struct_handles.push(StructHandle {
          module: ModuleHandleIndex(0),
          name: IdentifierIndex(m.identifiers.len() as u16),
          abilities: AbilitySet::EMPTY,
          type_parameters: vec![],
      });
      m.identifiers
          .push(Identifier::new("Bar".to_string()).unwrap());
  
      m.struct_defs.push(StructDefinition {
          struct_handle: StructHandleIndex(0),
          field_information: StructFieldInformation::Declared(vec![FieldDefinition {
              name: IdentifierIndex(m.identifiers.len() as u16),
              signature: TypeSignature(SignatureToken::U64),
          }]),
      });
      m.identifiers
          .push(Identifier::new("x".to_string()).unwrap());
  
      m
  }
  *)
  Definition basic_test_module (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
    match ε, τ, α with
    | [], [], [] =>
      ltac:(M.monadic
        (M.read (|
          let~ m :=
            M.alloc (|
              M.call_closure (|
                M.get_function (| "move_binary_format::file_format::empty_module", [] |),
                []
              |)
            |) in
          let~ _ :=
            M.alloc (|
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::FunctionHandle";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "push",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    m,
                    "move_binary_format::file_format::CompiledModule",
                    "function_handles"
                  |);
                  Value.StructRecord
                    "move_binary_format::file_format::FunctionHandle"
                    [
                      ("module",
                        Value.StructTuple
                          "move_binary_format::file_format::ModuleHandleIndex"
                          [ Value.Integer IntegerKind.U16 0 ]);
                      ("name",
                        Value.StructTuple
                          "move_binary_format::file_format::IdentifierIndex"
                          [
                            M.rust_cast
                              (M.call_closure (|
                                M.get_associated_function (|
                                  Ty.apply
                                    (Ty.path "alloc::vec::Vec")
                                    []
                                    [
                                      Ty.path "move_core_types::identifier::Identifier";
                                      Ty.path "alloc::alloc::Global"
                                    ],
                                  "len",
                                  []
                                |),
                                [
                                  M.SubPointer.get_struct_record_field (|
                                    m,
                                    "move_binary_format::file_format::CompiledModule",
                                    "identifiers"
                                  |)
                                ]
                              |))
                          ]);
                      ("parameters",
                        Value.StructTuple
                          "move_binary_format::file_format::SignatureIndex"
                          [ Value.Integer IntegerKind.U16 0 ]);
                      ("return_",
                        Value.StructTuple
                          "move_binary_format::file_format::SignatureIndex"
                          [ Value.Integer IntegerKind.U16 0 ]);
                      ("type_parameters",
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.apply
                              (Ty.path "alloc::vec::Vec")
                              []
                              [
                                Ty.path "move_binary_format::file_format::AbilitySet";
                                Ty.path "alloc::alloc::Global"
                              ],
                            "new",
                            []
                          |),
                          []
                        |))
                    ]
                ]
              |)
            |) in
          let~ _ :=
            M.alloc (|
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_core_types::identifier::Identifier";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "push",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    m,
                    "move_binary_format::file_format::CompiledModule",
                    "identifiers"
                  |);
                  M.call_closure (|
                    M.get_associated_function (|
                      Ty.apply
                        (Ty.path "core::result::Result")
                        []
                        [ Ty.path "move_core_types::identifier::Identifier"; Ty.path "anyhow::Error"
                        ],
                      "unwrap",
                      []
                    |),
                    [
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "move_core_types::identifier::Identifier",
                          "new",
                          [ Ty.path "alloc::string::String" ]
                        |),
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "alloc::string::ToString",
                              Ty.path "str",
                              [],
                              "to_string",
                              []
                            |),
                            [ M.read (| Value.String "foo" |) ]
                          |)
                        ]
                      |)
                    ]
                  |)
                ]
              |)
            |) in
          let~ _ :=
            M.alloc (|
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::FunctionDefinition";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "push",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    m,
                    "move_binary_format::file_format::CompiledModule",
                    "function_defs"
                  |);
                  Value.StructRecord
                    "move_binary_format::file_format::FunctionDefinition"
                    [
                      ("function",
                        Value.StructTuple
                          "move_binary_format::file_format::FunctionHandleIndex"
                          [ Value.Integer IntegerKind.U16 0 ]);
                      ("visibility",
                        Value.StructTuple
                          "move_binary_format::file_format::Visibility::Private"
                          []);
                      ("is_entry", Value.Bool false);
                      ("acquires_global_resources",
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.apply
                              (Ty.path "alloc::vec::Vec")
                              []
                              [
                                Ty.path "move_binary_format::file_format::StructDefinitionIndex";
                                Ty.path "alloc::alloc::Global"
                              ],
                            "new",
                            []
                          |),
                          []
                        |));
                      ("code",
                        Value.StructTuple
                          "core::option::Option::Some"
                          [
                            Value.StructRecord
                              "move_binary_format::file_format::CodeUnit"
                              [
                                ("locals",
                                  Value.StructTuple
                                    "move_binary_format::file_format::SignatureIndex"
                                    [ Value.Integer IntegerKind.U16 0 ]);
                                ("code",
                                  M.call_closure (|
                                    M.get_associated_function (|
                                      Ty.apply
                                        (Ty.path "slice")
                                        []
                                        [ Ty.path "move_binary_format::file_format::Bytecode" ],
                                      "into_vec",
                                      [ Ty.path "alloc::alloc::Global" ]
                                    |),
                                    [
                                      M.read (|
                                        M.call_closure (|
                                          M.get_associated_function (|
                                            Ty.apply
                                              (Ty.path "alloc::boxed::Box")
                                              []
                                              [
                                                Ty.apply
                                                  (Ty.path "array")
                                                  [ Value.Integer IntegerKind.Usize 1 ]
                                                  [
                                                    Ty.path
                                                      "move_binary_format::file_format::Bytecode"
                                                  ];
                                                Ty.path "alloc::alloc::Global"
                                              ],
                                            "new",
                                            []
                                          |),
                                          [
                                            M.alloc (|
                                              Value.Array
                                                [
                                                  Value.StructTuple
                                                    "move_binary_format::file_format::Bytecode::Ret"
                                                    []
                                                ]
                                            |)
                                          ]
                                        |)
                                      |)
                                    ]
                                  |))
                              ]
                          ])
                    ]
                ]
              |)
            |) in
          let~ _ :=
            M.alloc (|
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::StructHandle";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "push",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    m,
                    "move_binary_format::file_format::CompiledModule",
                    "struct_handles"
                  |);
                  Value.StructRecord
                    "move_binary_format::file_format::StructHandle"
                    [
                      ("module",
                        Value.StructTuple
                          "move_binary_format::file_format::ModuleHandleIndex"
                          [ Value.Integer IntegerKind.U16 0 ]);
                      ("name",
                        Value.StructTuple
                          "move_binary_format::file_format::IdentifierIndex"
                          [
                            M.rust_cast
                              (M.call_closure (|
                                M.get_associated_function (|
                                  Ty.apply
                                    (Ty.path "alloc::vec::Vec")
                                    []
                                    [
                                      Ty.path "move_core_types::identifier::Identifier";
                                      Ty.path "alloc::alloc::Global"
                                    ],
                                  "len",
                                  []
                                |),
                                [
                                  M.SubPointer.get_struct_record_field (|
                                    m,
                                    "move_binary_format::file_format::CompiledModule",
                                    "identifiers"
                                  |)
                                ]
                              |))
                          ]);
                      ("abilities",
                        M.read (| M.get_constant (| "move_binary_format::file_format::EMPTY" |) |));
                      ("type_parameters",
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.apply
                              (Ty.path "alloc::vec::Vec")
                              []
                              [
                                Ty.path "move_binary_format::file_format::StructTypeParameter";
                                Ty.path "alloc::alloc::Global"
                              ],
                            "new",
                            []
                          |),
                          []
                        |))
                    ]
                ]
              |)
            |) in
          let~ _ :=
            M.alloc (|
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_core_types::identifier::Identifier";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "push",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    m,
                    "move_binary_format::file_format::CompiledModule",
                    "identifiers"
                  |);
                  M.call_closure (|
                    M.get_associated_function (|
                      Ty.apply
                        (Ty.path "core::result::Result")
                        []
                        [ Ty.path "move_core_types::identifier::Identifier"; Ty.path "anyhow::Error"
                        ],
                      "unwrap",
                      []
                    |),
                    [
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "move_core_types::identifier::Identifier",
                          "new",
                          [ Ty.path "alloc::string::String" ]
                        |),
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "alloc::string::ToString",
                              Ty.path "str",
                              [],
                              "to_string",
                              []
                            |),
                            [ M.read (| Value.String "Bar" |) ]
                          |)
                        ]
                      |)
                    ]
                  |)
                ]
              |)
            |) in
          let~ _ :=
            M.alloc (|
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_binary_format::file_format::StructDefinition";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "push",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    m,
                    "move_binary_format::file_format::CompiledModule",
                    "struct_defs"
                  |);
                  Value.StructRecord
                    "move_binary_format::file_format::StructDefinition"
                    [
                      ("struct_handle",
                        Value.StructTuple
                          "move_binary_format::file_format::StructHandleIndex"
                          [ Value.Integer IntegerKind.U16 0 ]);
                      ("field_information",
                        Value.StructTuple
                          "move_binary_format::file_format::StructFieldInformation::Declared"
                          [
                            M.call_closure (|
                              M.get_associated_function (|
                                Ty.apply
                                  (Ty.path "slice")
                                  []
                                  [ Ty.path "move_binary_format::file_format::FieldDefinition" ],
                                "into_vec",
                                [ Ty.path "alloc::alloc::Global" ]
                              |),
                              [
                                M.read (|
                                  M.call_closure (|
                                    M.get_associated_function (|
                                      Ty.apply
                                        (Ty.path "alloc::boxed::Box")
                                        []
                                        [
                                          Ty.apply
                                            (Ty.path "array")
                                            [ Value.Integer IntegerKind.Usize 1 ]
                                            [
                                              Ty.path
                                                "move_binary_format::file_format::FieldDefinition"
                                            ];
                                          Ty.path "alloc::alloc::Global"
                                        ],
                                      "new",
                                      []
                                    |),
                                    [
                                      M.alloc (|
                                        Value.Array
                                          [
                                            Value.StructRecord
                                              "move_binary_format::file_format::FieldDefinition"
                                              [
                                                ("name",
                                                  Value.StructTuple
                                                    "move_binary_format::file_format::IdentifierIndex"
                                                    [
                                                      M.rust_cast
                                                        (M.call_closure (|
                                                          M.get_associated_function (|
                                                            Ty.apply
                                                              (Ty.path "alloc::vec::Vec")
                                                              []
                                                              [
                                                                Ty.path
                                                                  "move_core_types::identifier::Identifier";
                                                                Ty.path "alloc::alloc::Global"
                                                              ],
                                                            "len",
                                                            []
                                                          |),
                                                          [
                                                            M.SubPointer.get_struct_record_field (|
                                                              m,
                                                              "move_binary_format::file_format::CompiledModule",
                                                              "identifiers"
                                                            |)
                                                          ]
                                                        |))
                                                    ]);
                                                ("signature",
                                                  Value.StructTuple
                                                    "move_binary_format::file_format::TypeSignature"
                                                    [
                                                      Value.StructTuple
                                                        "move_binary_format::file_format::SignatureToken::U64"
                                                        []
                                                    ])
                                              ]
                                          ]
                                      |)
                                    ]
                                  |)
                                |)
                              ]
                            |)
                          ])
                    ]
                ]
              |)
            |) in
          let~ _ :=
            M.alloc (|
              M.call_closure (|
                M.get_associated_function (|
                  Ty.apply
                    (Ty.path "alloc::vec::Vec")
                    []
                    [
                      Ty.path "move_core_types::identifier::Identifier";
                      Ty.path "alloc::alloc::Global"
                    ],
                  "push",
                  []
                |),
                [
                  M.SubPointer.get_struct_record_field (|
                    m,
                    "move_binary_format::file_format::CompiledModule",
                    "identifiers"
                  |);
                  M.call_closure (|
                    M.get_associated_function (|
                      Ty.apply
                        (Ty.path "core::result::Result")
                        []
                        [ Ty.path "move_core_types::identifier::Identifier"; Ty.path "anyhow::Error"
                        ],
                      "unwrap",
                      []
                    |),
                    [
                      M.call_closure (|
                        M.get_associated_function (|
                          Ty.path "move_core_types::identifier::Identifier",
                          "new",
                          [ Ty.path "alloc::string::String" ]
                        |),
                        [
                          M.call_closure (|
                            M.get_trait_method (|
                              "alloc::string::ToString",
                              Ty.path "str",
                              [],
                              "to_string",
                              []
                            |),
                            [ M.read (| Value.String "x" |) ]
                          |)
                        ]
                      |)
                    ]
                  |)
                ]
              |)
            |) in
          m
        |)))
    | _, _, _ => M.impossible "wrong number of arguments"
    end.
  
  Axiom Function_basic_test_module :
    M.IsFunction "move_binary_format::file_format::basic_test_module" basic_test_module.
End file_format.
