Module Flambda2_types
The interface to the Flambda type system. This is parameterised over the expression language via Code_id.
type flambda_type = tval print : Format.formatter -> t -> unitval arity_of_list : t list -> [ `Unarized ] Flambda2_kinds.Flambda_arity.tval apply_renaming : t -> Flambda2_nominal.Renaming.t -> tinclude Flambda2_nominal.Contains_ids.S with type t := t
val ids_for_export : t -> Flambda2_nominal.Ids_for_export.tGather all table identifiers to export them.
val remove_unused_value_slots_and_shortcut_aliases :
t ->
used_value_slots:Flambda2_identifiers.Value_slot.Set.t ->
canonicalise:(Flambda2_term_basics.Simple.t -> Flambda2_term_basics.Simple.t) ->
tmodule Code_age_relation : sig ... endmodule Typing_env_extension : sig ... endmodule Typing_env : sig ... endval meet :
Typing_env.t ->
t ->
t ->
(t * Typing_env.t) Flambda2_lattices.Or_bottom.tval meet_shape :
Typing_env.t ->
t ->
shape:t ->
Typing_env.t Flambda2_lattices.Or_bottom.tmodule Join_analysis : sig ... endval cut_and_n_way_join :
Typing_env.t ->
(Typing_env.t
* Flambda2_identifiers.Apply_cont_rewrite_id.t
* Flambda2_term_basics.Continuation_use_kind.t)
list ->
params:Flambda2_bound_identifiers.Bound_parameters.t ->
cut_after:Flambda2_term_basics.Scope.t ->
extra_lifted_consts_in_use_envs:Flambda2_identifiers.Symbol.Set.t ->
extra_allowed_names:Flambda2_nominal.Name_occurrences.t ->
Typing_env.t
* Flambda2_identifiers.Apply_cont_rewrite_id.t Join_analysis.t optionmodule Function_type : sig ... endmodule Closures_entry : sig ... endval free_names : t -> Flambda2_nominal.Name_occurrences.ttype to_erase = | Everything_not_in of Typing_env.t| All_variables_except of Flambda2_identifiers.Variable.Set.t
val make_suitable_for_environment :
Typing_env.t ->
to_erase ->
(Flambda2_identifiers.Name.t * flambda_type) list ->
Typing_env_extension.With_extra_variables.tAdjust a type so it can be used in a different environment. There are two modes of operation: either a target environment can be specified, in which the resulting type is to be valid; or a set of variables may be supplied which are the only ones allowed to occur in the resulting type.
val apply_coercion :
flambda_type ->
Flambda2_term_basics.Coercion.t ->
flambda_typeval bottom : Flambda2_kinds.Flambda_kind.t -> tConstruct a bottom type of the given kind.
val unknown : Flambda2_kinds.Flambda_kind.t -> tConstruct a top ("unknown") type of the given kind.
val unknown_with_subkind :
?alloc_mode:Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
machine_width:Target_system.Machine_width.t ->
Flambda2_kinds.Flambda_kind.With_subkind.t ->
tval any_value : tval any_tagged_immediate : tval any_tagged_immediate_or_null : tval any_tagged_bool : machine_width:Target_system.Machine_width.t -> tval any_boxed_float32 : tval any_boxed_float : tval any_boxed_int32 : tval any_boxed_int64 : tval any_boxed_nativeint : tval any_naked_immediate : tval any_naked_bool : machine_width:Target_system.Machine_width.t -> tval any_naked_float32 : tval any_naked_float : tval any_naked_int8 : tval any_naked_int16 : tval any_naked_int32 : tval any_naked_int64 : tval any_naked_nativeint : tval any_region : tval any_rec_info : tval this_tagged_immediate : Flambda2_numbers.Target_ocaml_int.t -> tBuilding of types representing tagged / boxed values from specified constants.
val this_boxed_float32 :
Flambda2_numbers.Numeric_types.Float32_by_bit_pattern.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval this_boxed_float :
Flambda2_numbers.Numeric_types.Float_by_bit_pattern.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval this_boxed_int32 :
Flambda2_numbers.Numeric_types.Int32.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval this_boxed_int64 :
Flambda2_numbers.Numeric_types.Int64.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval this_boxed_nativeint :
Flambda2_numbers.Targetint_32_64.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval this_boxed_vec128 :
Flambda2_numbers.Vector_types.Vec128.Bit_pattern.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval this_boxed_vec256 :
Flambda2_numbers.Vector_types.Vec256.Bit_pattern.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval this_boxed_vec512 :
Flambda2_numbers.Vector_types.Vec512.Bit_pattern.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval these_tagged_immediates : Flambda2_numbers.Target_ocaml_int.Set.t -> tval these_boxed_float32s :
Flambda2_numbers.Numeric_types.Float32_by_bit_pattern.Set.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval these_boxed_floats :
Flambda2_numbers.Numeric_types.Float_by_bit_pattern.Set.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval these_boxed_int32s :
Flambda2_numbers.Numeric_types.Int32.Set.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval these_boxed_int64s :
Flambda2_numbers.Numeric_types.Int64.Set.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval these_boxed_nativeints :
Flambda2_numbers.Targetint_32_64.Set.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval this_naked_immediate : Flambda2_numbers.Target_ocaml_int.t -> tBuilding of types representing untagged / unboxed values from specified constants.
val this_naked_float32 :
Flambda2_numbers.Numeric_types.Float32_by_bit_pattern.t ->
tval this_naked_float :
Flambda2_numbers.Numeric_types.Float_by_bit_pattern.t ->
tval this_naked_int8 : Flambda2_numbers.Numeric_types.Int8.t -> tval this_naked_int16 : Flambda2_numbers.Numeric_types.Int16.t -> tval this_naked_int32 : Flambda2_numbers.Numeric_types.Int32.t -> tval this_naked_int64 : Flambda2_numbers.Numeric_types.Int64.t -> tval this_naked_nativeint : Flambda2_numbers.Targetint_32_64.t -> tval this_naked_vec128 : Flambda2_numbers.Vector_types.Vec128.Bit_pattern.t -> tval this_naked_vec256 : Flambda2_numbers.Vector_types.Vec256.Bit_pattern.t -> tval this_naked_vec512 : Flambda2_numbers.Vector_types.Vec512.Bit_pattern.t -> tval this_rec_info : Flambda2_term_basics.Rec_info_expr.t -> tval these_naked_immediates : Flambda2_numbers.Target_ocaml_int.Set.t -> tval these_naked_float32s :
Flambda2_numbers.Numeric_types.Float32_by_bit_pattern.Set.t ->
tval these_naked_floats :
Flambda2_numbers.Numeric_types.Float_by_bit_pattern.Set.t ->
tval these_naked_int8s : Flambda2_numbers.Numeric_types.Int8.Set.t -> tval these_naked_int16s : Flambda2_numbers.Numeric_types.Int16.Set.t -> tval these_naked_int32s : Flambda2_numbers.Numeric_types.Int32.Set.t -> tval these_naked_int64s : Flambda2_numbers.Numeric_types.Int64.Set.t -> tval these_naked_nativeints : Flambda2_numbers.Targetint_32_64.Set.t -> tval boxed_float32_alias_to :
naked_float32:Flambda2_identifiers.Variable.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval boxed_float_alias_to :
naked_float:Flambda2_identifiers.Variable.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval tagged_int8_alias_to :
naked_int8:Flambda2_identifiers.Variable.t ->
machine_width:Target_system.Machine_width.t ->
tval tagged_int16_alias_to :
naked_int16:Flambda2_identifiers.Variable.t ->
machine_width:Target_system.Machine_width.t ->
tval boxed_int32_alias_to :
naked_int32:Flambda2_identifiers.Variable.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval boxed_int64_alias_to :
naked_int64:Flambda2_identifiers.Variable.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval boxed_nativeint_alias_to :
naked_nativeint:Flambda2_identifiers.Variable.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval boxed_vec128_alias_to :
naked_vec128:Flambda2_identifiers.Variable.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval boxed_vec256_alias_to :
naked_vec256:Flambda2_identifiers.Variable.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval boxed_vec512_alias_to :
naked_vec512:Flambda2_identifiers.Variable.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval box_float32 : t -> Flambda2_bound_identifiers.Alloc_mode.For_types.t -> tval box_float : t -> Flambda2_bound_identifiers.Alloc_mode.For_types.t -> tval box_int32 : t -> Flambda2_bound_identifiers.Alloc_mode.For_types.t -> tval box_int64 : t -> Flambda2_bound_identifiers.Alloc_mode.For_types.t -> tval box_nativeint : t -> Flambda2_bound_identifiers.Alloc_mode.For_types.t -> tval box_vec128 : t -> Flambda2_bound_identifiers.Alloc_mode.For_types.t -> tval box_vec256 : t -> Flambda2_bound_identifiers.Alloc_mode.For_types.t -> tval box_vec512 : t -> Flambda2_bound_identifiers.Alloc_mode.For_types.t -> tval tagged_immediate_alias_to :
naked_immediate:Flambda2_identifiers.Variable.t ->
tval any_block : tval immutable_block :
machine_width:Target_system.Machine_width.t ->
is_unique:bool ->
Flambda2_kinds.Tag.t ->
shape:Flambda2_kinds.Flambda_kind.Block_shape.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
fields:t list ->
tThe type of an immutable block with a known tag, size and field types.
val immutable_block_with_size_at_least :
machine_width:Target_system.Machine_width.t ->
tag:Flambda2_kinds.Tag.t Flambda2_lattices.Or_unknown.t ->
n:Flambda2_numbers.Target_ocaml_int.t ->
shape:Flambda2_kinds.Flambda_kind.Block_shape.t ->
field_n_minus_one:Flambda2_identifiers.Variable.t ->
tThe type of an immutable block with at least n fields and an unknown tag. The type of the n - 1th field is taken to be an Equals to the given variable.
val mutable_block : Flambda2_bound_identifiers.Alloc_mode.For_types.t -> tval variant :
machine_width:Target_system.Machine_width.t ->
const_ctors:t ->
non_const_ctors:
(Flambda2_kinds.Flambda_kind.Block_shape.t * t list)
Flambda2_kinds.Tag.Scannable.Map.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
tval this_immutable_string :
string ->
machine_width:Target_system.Machine_width.t ->
tval mutable_string :
size:int ->
machine_width:Target_system.Machine_width.t ->
tval exactly_this_closure :
Flambda2_identifiers.Function_slot.t ->
all_function_slots_in_set:
Function_type.t Flambda2_lattices.Or_unknown.t
Flambda2_identifiers.Function_slot.Map.t ->
all_closure_types_in_set:t Flambda2_identifiers.Function_slot.Map.t ->
all_value_slots_in_set:flambda_type Flambda2_identifiers.Value_slot.Map.t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
flambda_typeval closure_with_at_least_these_function_slots :
this_function_slot:Flambda2_identifiers.Function_slot.t ->
Flambda2_term_basics.Simple.t Flambda2_identifiers.Function_slot.Map.t ->
flambda_typeval closure_with_at_least_this_value_slot :
this_function_slot:Flambda2_identifiers.Function_slot.t ->
Flambda2_identifiers.Value_slot.t ->
value_slot_var:Flambda2_identifiers.Variable.t ->
value_slot_kind:Flambda2_kinds.Flambda_kind.t ->
flambda_typeval closure_with_at_least_these_value_slots :
this_function_slot:Flambda2_identifiers.Function_slot.t ->
(Flambda2_identifiers.Variable.t * Flambda2_kinds.Flambda_kind.t)
Flambda2_identifiers.Value_slot.Map.t ->
flambda_typeval array_of_length :
element_kind:
Flambda2_kinds.Flambda_kind.With_subkind.t
Flambda2_lattices.Or_unknown_or_bottom.t ->
length:flambda_type ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
flambda_typeval mutable_array :
element_kind:
Flambda2_kinds.Flambda_kind.With_subkind.t
Flambda2_lattices.Or_unknown_or_bottom.t ->
length:flambda_type ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
flambda_typeval immutable_array :
element_kind:
Flambda2_kinds.Flambda_kind.With_subkind.t
Flambda2_lattices.Or_unknown_or_bottom.t ->
fields:flambda_type list ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t ->
machine_width:Target_system.Machine_width.t ->
flambda_typeval alias_type_of :
Flambda2_kinds.Flambda_kind.t ->
Flambda2_term_basics.Simple.t ->
tConstruct a type equal to the type of the given name. (The name must be present in the given environment when calling e.g. join.)
val kind : t -> Flambda2_kinds.Flambda_kind.tDetermine the (unique) kind of a type.
val unknown_types_from_arity :
machine_width:Target_system.Machine_width.t ->
[ `Unarized ] Flambda2_kinds.Flambda_arity.t ->
t listFor each of the kinds in an arity, create an "unknown" type.
val is_bottom : Typing_env.t -> t -> boolWhether the given type says that a term of that type can never be constructed (in other words, it is Invalid).
val is_unknown : Typing_env.t -> t -> boolval is_unknown_maybe_null : Typing_env.t -> t -> boolWhether the given type contains no information, except about nullability (i.e. returns `true` for both `value` and `value_or_null`, whereas `is_unknown` returns `false` for `value` because we know something -- it can't be `null`).
val is_alias_to_a_symbol : t -> boolval type_for_const : Flambda2_identifiers.Reg_width_const.t -> tval kind_for_const :
Flambda2_identifiers.Reg_width_const.t ->
Flambda2_kinds.Flambda_kind.tval prove_equals_tagged_immediates :
Typing_env.t ->
t ->
Flambda2_numbers.Target_ocaml_int.Set.t proof_of_propertyval meet_equals_tagged_immediates :
Typing_env.t ->
t ->
Flambda2_numbers.Target_ocaml_int.Set.t meet_shortcutval meet_naked_immediates :
Typing_env.t ->
t ->
Flambda2_numbers.Target_ocaml_int.Set.t meet_shortcutval meet_equals_single_tagged_immediate :
Typing_env.t ->
t ->
Flambda2_numbers.Target_ocaml_int.t meet_shortcutval meet_naked_float32s :
Typing_env.t ->
t ->
Flambda2_numbers.Numeric_types.Float32_by_bit_pattern.Set.t meet_shortcutval meet_naked_floats :
Typing_env.t ->
t ->
Flambda2_numbers.Numeric_types.Float_by_bit_pattern.Set.t meet_shortcutval meet_naked_int8s :
Typing_env.t ->
t ->
Flambda2_numbers.Numeric_types.Int8.Set.t meet_shortcutval meet_naked_int16s :
Typing_env.t ->
t ->
Flambda2_numbers.Numeric_types.Int16.Set.t meet_shortcutval meet_naked_int32s :
Typing_env.t ->
t ->
Flambda2_numbers.Numeric_types.Int32.Set.t meet_shortcutval meet_naked_int64s :
Typing_env.t ->
t ->
Flambda2_numbers.Numeric_types.Int64.Set.t meet_shortcutval meet_naked_nativeints :
Typing_env.t ->
t ->
Flambda2_numbers.Targetint_32_64.Set.t meet_shortcuttype variant_like_proof = private {const_ctors : Flambda2_numbers.Target_ocaml_int.Set.t Flambda2_lattices.Or_unknown.t;non_const_ctors_with_sizes : (Flambda2_numbers.Target_ocaml_int.t * Flambda2_kinds.Flambda_kind.Block_shape.t) Flambda2_kinds.Tag.Scannable.Map.t;
}val meet_variant_like : Typing_env.t -> t -> variant_like_proof meet_shortcutval prove_variant_like :
Typing_env.t ->
t ->
variant_like_proof proof_of_propertytype boxed_or_tagged_number = private | Boxed of Flambda2_bound_identifiers.Alloc_mode.For_types.t * Flambda2_kinds.Flambda_kind.Boxable_number.t * t| Tagged_immediate
If ty is known to represent a boxed number or a tagged integer, prove_is_a_boxed_number env ty is Proved (alloc_mode,kind,contents_ty). kind is the kind of the unboxed number.
If ty is known to represent something of kind value that is not a number prove_is_a_boxed_number env ty is Invalid.
Otherwise it is Unknown or Wrong_kind when ty is not of kind value.
val prove_is_a_boxed_or_tagged_number :
Typing_env.t ->
t ->
boxed_or_tagged_number proof_of_propertyval prove_nothing : Typing_env.t -> t -> _ proof_of_propertyval prove_is_a_tagged_immediate : Typing_env.t -> t -> unit proof_of_propertyval prove_is_a_boxed_float32 : Typing_env.t -> t -> unit proof_of_propertyval prove_is_a_boxed_float : Typing_env.t -> t -> unit proof_of_propertyval prove_is_a_boxed_int32 : Typing_env.t -> t -> unit proof_of_propertyval prove_is_a_boxed_int64 : Typing_env.t -> t -> unit proof_of_propertyval prove_is_a_boxed_nativeint : Typing_env.t -> t -> unit proof_of_propertyval prove_is_a_boxed_vec128 : Typing_env.t -> t -> unit proof_of_propertyval prove_is_a_boxed_vec256 : Typing_env.t -> t -> unit proof_of_propertyval prove_is_a_boxed_vec512 : Typing_env.t -> t -> unit proof_of_propertyval prove_is_or_is_not_a_boxed_float :
Typing_env.t ->
t ->
bool proof_of_propertyval prove_unique_tag_and_size :
Typing_env.t ->
t ->
(Flambda2_kinds.Tag.t
* Flambda2_kinds.Flambda_kind.Block_shape.t
* Flambda2_numbers.Target_ocaml_int.t)
proof_of_propertyval prove_unique_fully_constructed_immutable_heap_block :
Typing_env.t ->
t ->
(Flambda2_kinds.Tag.t
* Flambda2_kinds.Flambda_kind.Block_shape.t
* Flambda2_numbers.Target_ocaml_int.t
* Flambda2_term_basics.Simple.t list)
proof_of_propertyval prove_is_int : Typing_env.t -> t -> bool proof_of_propertyval prove_is_not_a_pointer : Typing_env.t -> t -> bool proof_of_propertyval meet_is_flat_float_array : Typing_env.t -> t -> bool meet_shortcutval meet_is_non_empty_naked_number_array :
Flambda2_kinds.Flambda_kind.Naked_number_kind.t ->
Typing_env.t ->
t ->
unit meet_shortcutval prove_is_immediates_array : Typing_env.t -> t -> unit proof_of_propertyval meet_is_immutable_array :
Typing_env.t ->
t ->
(Flambda2_kinds.Flambda_kind.With_subkind.t
Flambda2_lattices.Or_unknown_or_bottom.t
* t array
* Flambda2_bound_identifiers.Alloc_mode.For_types.t)
meet_shortcutval prove_is_immutable_array :
Typing_env.t ->
t ->
(Flambda2_kinds.Flambda_kind.With_subkind.t
Flambda2_lattices.Or_unknown_or_bottom.t
* t array
* Flambda2_bound_identifiers.Alloc_mode.For_types.t)
proof_of_propertyval meet_single_closures_entry :
Typing_env.t ->
t ->
(Flambda2_identifiers.Function_slot.t
* Flambda2_bound_identifiers.Alloc_mode.For_types.t
* Closures_entry.t
* Function_type.t)
meet_shortcutval prove_single_closures_entry :
Typing_env.t ->
t ->
(Flambda2_identifiers.Function_slot.t
* Flambda2_bound_identifiers.Alloc_mode.For_types.t
* Closures_entry.t
* Function_type.t)
proof_of_propertyval meet_strings :
Typing_env.t ->
t ->
Flambda2_term_basics.String_info.Set.t meet_shortcutval prove_strings :
Typing_env.t ->
t ->
Flambda2_term_basics.String_info.Set.t proof_of_propertyval prove_tagging_of_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_term_basics.Simple.t proof_of_propertyAttempt to show that the provided type describes the tagged version of a unique naked immediate Simple.
This function will return Unknown if values of the provided type might sometimes, but not always, be a tagged immediate (for example if it is a variant type involving blocks).
val meet_tagging_of_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_term_basics.Simple.t meet_shortcutAttempt to show that the provided type _can_ describe, but might not always describe, the tagged version of a unique naked immediate Simple. It is guaranteed that if a Simple is returned, the type does not describe any other tagged immediate.
val meet_boxed_float32_containing_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_boxed_float_containing_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_boxed_int32_containing_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_boxed_int64_containing_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_boxed_nativeint_containing_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_boxed_vec128_containing_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_boxed_vec256_containing_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_boxed_vec512_containing_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_block_field_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
field_kind:Flambda2_kinds.Flambda_kind.t ->
t ->
Flambda2_numbers.Target_ocaml_int.t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_project_value_slot_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_identifiers.Value_slot.t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_project_function_slot_simple :
Typing_env.t ->
min_name_mode:Flambda2_nominal.Name_mode.t ->
t ->
Flambda2_identifiers.Function_slot.t ->
Flambda2_term_basics.Simple.t meet_shortcutval meet_rec_info :
Typing_env.t ->
t ->
Flambda2_term_basics.Rec_info_expr.t meet_shortcutval prove_alloc_mode_of_boxed_number :
Typing_env.t ->
t ->
Flambda2_bound_identifiers.Alloc_mode.For_types.t proof_of_propertyval prove_physical_equality : Typing_env.t -> t -> t -> bool proof_of_propertytype to_lift = private | Immutable_block of {tag : Flambda2_kinds.Tag.Scannable.t;is_unique : bool;shape : Flambda2_kinds.Flambda_kind.Scannable_block_shape.t;fields : Flambda2_term_basics.Simple.t list;
}| Boxed_float32 of Flambda2_numbers.Numeric_types.Float32_by_bit_pattern.t| Boxed_float of Flambda2_numbers.Numeric_types.Float_by_bit_pattern.t| Boxed_int32 of Flambda2_numbers.Numeric_types.Int32.t| Boxed_int64 of Flambda2_numbers.Numeric_types.Int64.t| Boxed_nativeint of Flambda2_numbers.Targetint_32_64.t| Boxed_vec128 of Flambda2_numbers.Vector_types.Vec128.Bit_pattern.t| Boxed_vec256 of Flambda2_numbers.Vector_types.Vec256.Bit_pattern.t| Boxed_vec512 of Flambda2_numbers.Vector_types.Vec512.Bit_pattern.t| Immutable_float32_array of {fields : Flambda2_numbers.Numeric_types.Float32_by_bit_pattern.t list;
}| Immutable_float_array of {fields : Flambda2_numbers.Numeric_types.Float_by_bit_pattern.t list;
}| Immutable_int_array of {fields : Flambda2_numbers.Target_ocaml_int.t list;
}| Immutable_int8_array of {fields : Flambda2_numbers.Numeric_types.Int8.t list;
}| Immutable_int16_array of {fields : Flambda2_numbers.Numeric_types.Int16.t list;
}| Immutable_int32_array of {fields : Int32.t list;
}| Immutable_int64_array of {fields : Int64.t list;
}| Immutable_nativeint_array of {fields : Flambda2_numbers.Targetint_32_64.t list;
}| Immutable_vec128_array of {fields : Flambda2_numbers.Vector_types.Vec128.Bit_pattern.t list;
}| Immutable_vec256_array of {fields : Flambda2_numbers.Vector_types.Vec256.Bit_pattern.t list;
}| Immutable_vec512_array of {fields : Flambda2_numbers.Vector_types.Vec512.Bit_pattern.t list;
}| Immutable_value_array of {fields : Flambda2_term_basics.Simple.t list;
}| Empty_array of Flambda2_term_basics.Empty_array_kind.t
type reification_result = private | Lift of to_lift| Simple of Flambda2_term_basics.Simple.t| Cannot_reify| Invalid
val reify :
allowed_if_free_vars_defined_in:Typing_env.t ->
var_is_defined_at_toplevel:(Flambda2_identifiers.Variable.t -> bool) ->
var_is_symbol_projection:(Flambda2_identifiers.Variable.t -> bool) ->
Typing_env.t ->
t ->
reification_resultval never_holds_locally_allocated_values :
Typing_env.t ->
Flambda2_identifiers.Variable.t ->
unit proof_of_propertyval remove_outermost_alias : Typing_env.t -> t -> tmodule Equal_types_for_debug : sig ... endmodule Rewriter : sig ... end