The attribute indexes extensionality lemma using the type of the
objects (i.e. my_collection) which it gets from the statement of
the lemma. In some cases, the same lemma can be used to state the
extensionality of multiple types that are definitionally equivalent.
Apply multiple extensionality lemmas, destructing the arguments using the given patterns.
ext ps (some n) applies at most n extensionality lemmas. Returns the unused patterns.
ext1 id selects and apply one extensionality lemma (with attribute
ext), using id, if provided, to name a local constant
introduced by the lemma. If id is omitted, the local constant is
named automatically, as per intro. Placing a ? after ext1
(e.g. ext1? i ⟨a,b⟩ : 3) will display a sequence of tactic
applications that can replace the call to ext1.
ext applies as many extensionality lemmas as possible;
ext ids, with ids a list of identifiers, finds extentionality and applies them
until it runs out of identifiers in ids to name the local constants.
ext can also be given an rcases pattern in place of an identifier.
This will destruct the introduced local constant.
Placing a ? after ext (e.g. ext? i ⟨a,b⟩ : 3) will display
a sequence of tactic applications that can replace the call to ext.
set_option trace.ext true will trace every attempted lemma application,
along with the time it takes for the application to succeed or fail.
This is useful for debugging slow ext calls.