Documentation

Aesop.Forward.State

inductive Aesop.RawHyp :

A hypothesis that has not yet been matched against a premise, or a rule pattern substitution.

structure Aesop.Hyp :

A hypothesis that was matched against a premise, or a rule pattern substitution.

  • The hypothesis, or none if this is a rule pattern substitution.

  • subst : Substitution

    The substitution that results from matching the hypothesis against a premise or that was derived from the pattern.

Equations
Equations
  • One or more equations did not get rendered due to their size.
Equations

Returns true if h is the hyp fvarId or is a pattern substitution containing fvarId.

Equations

Does this Hyp represent a pattern substitution?

Equations
structure Aesop.InstMap :

Partial matches associated with a particular slot instantiation. An entry s ↦ e ↦ (ms, hs) indicates that for the instantiation e of slot s, we have partial matches ms and hypotheses hs.

Equations
  • One or more equations did not get rendered due to their size.
@[inline]

Returns the set of matches and hypotheses associated with a slot slot with instantiation inst.

Equations
  • One or more equations did not get rendered due to their size.
@[inline]

Returns the set of matches and hypotheses associated with a slot slot with instantiation inst, or (∅, ∅) if slot and inst do not have any associated matches.

Equations

Applies a transfomation to the data associated to slot and inst. If there is no such data, the transformation is applied to (∅, ∅). Returns the new instantiation map and the result of f.

Equations
  • One or more equations did not get rendered due to their size.
def Aesop.InstMap.insertHyp (imap : InstMap) (slot : SlotIndex) (inst : RPINF) (hyp : Hyp) :

Inserts a hyp associated with slot slot and instantiation inst. The hyp must be a valid assignment for the slot's premise. Returns true if the hyp was not previously associated with slot and inst.

Equations
  • One or more equations did not get rendered due to their size.

Inserts a match associated with slot slot and instantiation inst. The match's level must be slot. Returns true if the match was not previously associated with slot and inst.

Equations
  • One or more equations did not get rendered due to their size.

Inserts a match. The match m is associated with the slot given by its level (i.e., the maximal slot for which m contains a hypothesis) and the instantiation of var given by the map's substitution. Returns true if the match was not previously associated with this slot and instantiation.

Equations
  • One or more equations did not get rendered due to their size.

Modify the maps for slot slot and all later slots.

Equations
  • One or more equations did not get rendered due to their size.

Remove hyp from slot and all later slots. For each mapping s ↦ e ↦ (ms, hs) in imap, if s ≥ slot, then hyp is removed from hs and any matches containing hyp are removed from ms.

Equations
  • One or more equations did not get rendered due to their size.

Remove the pattern substitution subst from slot and all later slots. For each mapping s ↦ e ↦ (ms, hs) in imap, if s ≥ slot, then subst is removed from hs and any matches containing subst are removed from ms.

Equations
  • One or more equations did not get rendered due to their size.

Map from variables to the matches and hypotheses of slots whose types contain the variables.

Get the InstMap associated with a variable.

Equations

Get the InstMap associated with a variable, or an empty InstMap.

Equations
def Aesop.VariableMap.modify {α : Type u_1} (vmap : VariableMap) (var : PremiseIndex) (f : InstMapInstMap × α) :

Modify the InstMap associated to variable var. If no such InstMap exists, the function f is applied to the empty InstMap and the result is associated with var. Returns the new variable map and the result of f.

Equations
  • One or more equations did not get rendered due to their size.

Add a hypothesis hyp. Precondition: hyp matches the premise of slot slot with substitution hyp.subst (and hence hyp.subst contains a mapping for each variable in slot.common). Returns true if the variable map changed.

Equations
  • One or more equations did not get rendered due to their size.

Add a match m. Precondition: nextSlot is the slot with index m.level + 1. Returns true if the variable map changed.

Equations
  • One or more equations did not get rendered due to their size.

Remove a hyp from slot and all later slots.

Equations

Remove the pattern substitution subst from slot and all later slots.

Equations

Find matches in slot slot - 1 whose substitutions are compatible with subst. Preconditions: slot.index is nonzero, slot.common is nonempty and each variable contained in slot.common is also contained in subst.

Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.

Find hyps in slot whose substitutions are compatible with subst. Precondition: slot.common is nonempty and each variable contained in it is also contained in subst.

Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.

Structure representing the state of a slot cluster.

  • slots : Array Slot

    The cluster's slots.

  • conclusionDeps : Array PremiseIndex

    The premises that appear in the rule's conclusion. These are the same for all cluster states of a rule, but are stored here for convenience.

  • variableMap : VariableMap

    The variable map for this cluster.

  • completeMatches : Lean.PHashSet Match

    Complete matches for this cluster.

  • addHypsLazily : Bool

    When this flag is true, hyps are added to the slotQueues rather than the variableMap. This is an optimisation that avoids performing unifications until a rule can potentially generate a complete match. More precisely:

    • addHypsLazily is initially set to true.
    • While addHypsLazily is true, hyps are added to (and deleted from) the slotQueues and are not added to the variableMap. Once an addition causes all slot queues to have at least one element, addHypsLazily is permanently set to false and hyps for slot 0 are added to the variableMap.
    • While addHypsLazily is false:
      • Hyps for slot i are added directly to the variable maps if i = 0 or the slot i - 1 has matches. Otherwise they are added to the slot queue for i. (More precisely, we only track whether slot i - 1 has had matches at some point. This allows us to ignore deletions.)
      • The insertion of a match into slot i causes all hyps at slot i + 1 to be moved from the slot queue into the variableMap.
  • slotQueues : Array (Array RawHyp)

    Hypotheses or pattern substitutions that have been added to the cluster state, but have not yet been added to the variableMap.

  • slotQueues_size : self.slotQueues.size = self.slots.size

    There is exactly one queue for each slot.

  • slotMaybeHasMatches : Array Bool

    The ith element of this array is true if a match was at some point added to slot i.

  • slotMaybeHasMatches_size : self.slotMaybeHasMatches.size = self.slots.size

    There is exactly one boolean for each slot.

Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.
@[always_inline]

Get the slot with the given index. Panic if the index is invalid.

Equations

Get the slot with the given premise index.

Equations

Match hypothesis hyp against the slot with index slot in cs (which must be a valid index).

Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.

Context for the AddM monad.

  • premiseMVars : Array Lean.MVarId

    Metavariables for the premises of the rule for which a hyp or match is being added. When adding hyps, they are unified with these metavariables.

  • premiseLMVars : Array Lean.LMVarId

    Metavariables for level parameters appearing in the rule's premises.

@[reducible, inline]

A monad for operations that add hyps or matches to a cluster state. The monad's state is an array of complete matches discovered during while adding hyps/matches.

Equations
def Aesop.ClusterState.AddM.run {α : Type} (premiseMVars : Array Lean.MVarId) (premiseLMVars : Array Lean.LMVarId) (x : AddM α) :

Run an AddM action.

Equations

Add a match to the cluster state. Returns the new cluster state and any new complete matches for this cluster.

partial def Aesop.ClusterState.addHyp (cs : ClusterState) (slot : Slot) (h : Hyp) :

Add a hypothesis to the cluster state. hyp.subst must be the substitution that results from applying h to slot.

Add a hypothesis or pattern substitution to the cluster state.

Insert the raw hyps from slot's queue into the variable map.

Add a hypothesis or pattern substitution to the queue for its slot. If afterwards each slot queue contains at least one element, then the returned cluster state cs has cs.addHypsLazily = false.

Equations
  • One or more equations did not get rendered due to their size.

Add a hypothesis or pattern substitution to the cluster state. If a hypothesis is given and its type does not match the premise corresponding to slot, it is not added.

Equations
  • One or more equations did not get rendered due to their size.

Erase a RawHyp from the slot queue of the given slot.

Equations
  • One or more equations did not get rendered due to their size.

Erase a hypothesis from the cluster state.

Equations
  • One or more equations did not get rendered due to their size.

Erase a pattern substitution from the cluster state.

Equations
  • One or more equations did not get rendered due to their size.

The source of a pattern substitution. The same substitution can have multiple sources.

Forward state for one rule.

Equations
Equations
  • One or more equations did not get rendered due to their size.

The initial (empty) rule state for a given forward rule.

Equations
  • One or more equations did not get rendered due to their size.

Add a hypothesis or pattern substitution to the rule state. Returns the new rule state and any newly completed matches. If a hypothesis is given and it does not match premise pi, nothing happens.

Equations
  • One or more equations did not get rendered due to their size.
def Aesop.RuleState.addRawHyp.getCompleteMatches (clusterStates : Array ClusterState) (clusterIdx : Nat) (newCompleteMatches : Array Match) :
Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.

Erase a pattern substitution that was obtained from the given source.

Equations
  • One or more equations did not get rendered due to their size.

Erase a hypothesis from the rule state.

Equations
  • One or more equations did not get rendered due to their size.

State representing the non-complete matches of a given set of forward rules in a given local context.

Equations
Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.

Add a hypothesis to the forward state. If fs represents a local context lctx, then fs.addHyp h ms represents lctx with h added. ms must overapproximate the rules for which h may unify with a maximal premise.

Equations
  • One or more equations did not get rendered due to their size.

Add a hypothesis to the forward state. If fs represents a local context lctx, then fs.addHyp h ms represents lctx with h added. ms must overapproximate the rules for which h may unify with a maximal premise.

Equations

Add a pattern substitution to the forward state.

Equations
  • One or more equations did not get rendered due to their size.

Add a pattern substitution to the forward state.

Equations

Add multiple pattern substitutions to the forward state.

Equations
  • One or more equations did not get rendered due to their size.

Add multiple pattern substitutions to the forward state.

Equations

Add a hypothesis and to the forward state, along with any rule pattern substitutions obtained from it.

Equations
  • One or more equations did not get rendered due to their size.

Add a hypothesis and to the forward state, along with any rule pattern substitutions obtained from it.

Equations

Erase pattern substitutions with the given source.

Equations
  • One or more equations did not get rendered due to their size.

Remove a hypothesis from the forward state. If fs represents a local context lctx, then fs.eraseHyp h ms represents lctx with h removed. type must be the normalised type of h. ms must contain all rules for which h may unify with a maximal premise.

Equations
  • One or more equations did not get rendered due to their size.

Update the pattern substitutions after the goal's target changed. goal is the new goal. newPatSubsts are the new target's pattern substitutions.

Equations

Update the pattern substitutions after the goal's target changed. goal is the new goal. newPatSubsts are the new target's pattern substitutions.

Equations