Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
Gamma_holes
is a context with holes which can be filled later. A hole is a local unnamed variable with a type (i.e. an assumption that an element with this type exists), initially without value. Later on the value can be provided.
val count : t -> int
The size of the context.
val count_base : t -> int
The size of the base context.
val count_bounds : t -> int
The number of bound variables which have been entered.
val count_locals : t -> int
The number of holes and bound variable which have been entered.
val index_of_level : int -> t -> int
val is_hole : int -> t -> bool
Is the variable a hole?
val is_bound : int -> t -> bool
Is the variable a bound variable?
val bound_number : int -> t -> int
bound_number idx gh
Return the number of the bound variable at idx
.
Precondition:
is_bound idx gh
variable_of_bound i gh
Compute the variable corresponding to the i
th bound variable.
Precondition:
i < count_bounds gh
val has_value : int -> t -> bool
Has the variable a value i.e. is it a hole with value.
unfilled_holes cnt0 term gh
List of unfilled holes in term
starting at level cnt0
.
The returned list contains the De Bruijn levels of the unfilled holes.
Precondition:
cnt0 <= count gh
expand term gh
Replace all holes in term
with its values, if available.
is_expanded term gh
Is the term term
expanded i.e. does it not contain any filled holes?
term_of_term_n tn gh
Lift the term tn
into the context and expand it.
fill_hole idx value gh
Fill the hole at idx
with value
. In case that value
is a function abstraction appearing in a function position and the flag beta_reduce
is set, do a beta reduction.
Preconditions:
is_unfilled idx gh
fill_hole idx value gh
Fill the hole at idx
with value
.
Preconditions:
is_hole idx gh
not (has_value idx gh)
is_expanded value gh
push_bound name is_typed gh
adds a bound variable to the context. The bound variable can be later used to construct binders like Pi (arg_tp, res_tp,
info
or Lambda (arg_tp, exp, info
. is_typed
is used to construct the binder.
push_local name typ gh
is synonym for push_bound name true gh
type_of_variable idx gh
Return the expanded type of the variable idx
.
val type_of_literal : Term.Value.t -> t -> Term.typ
pi nbounds result_tp gh
Compute a product type with result_tp
using the last nbounds
bound variables.
all (a: A) (b: B) ... : RT
Preconditions:
nbounds <= count_bounds gh
lambda nbounds exp gh
Compute a function term with the inner expression exp
using the last nbounds
bound variables.
\ (a: A) (b: B) ... := exp
Preconditions:
nbounds <= count_bounds gh