Wolfram Function Repository
Instantuse addon functions for the Wolfram Language
Function Repository Resource:
Restructure an expression with nested AmbiguityList expressions into a single flat AmbiguityList
ResourceFunction["FlattenAmbiguityList"][expr] restructures expr as a single AmbiguityList.  
ResourceFunction["FlattenAmbiguityList"][expr, n] limits to no more than n possibilities.  
ResourceFunction["FlattenAmbiguityList"][expr, n, crit] limits to no more than n possibilities p_{i} for which crit[p_{i}] is True. 
AmbiguityList is often only wrapped around the ambiguous part of an expression:
In[1]:= 

Out[1]= 

By moving the arguments inside the listed functions, all possible values can be computed directly:
In[2]:= 

Out[2]= 

Interpreter can return nested AmbiguityList expressions that may be difficult to reason about:
In[3]:= 

Out[3]= 

Flatten the expression to see all possibilities in a single flat list:
In[4]:= 

Out[4]= 

Ambiguous expressions can produce a large number of possibilities:
In[5]:= 

Out[5]= 

In[6]:= 

Out[6]= 

Limit the number of distinct possibilities produced:
In[7]:= 

Out[7]= 

Also limit to possibilities that pass a selection function:
In[8]:= 

Out[8]= 

By default, only preexisting metadata is maintained during restructuring:
In[9]:= 

Out[9]= 

Add an entity type to descriptions for further clarity:
In[10]:= 

Out[10]= 

Show metadata alongside possibilities:
In[11]:= 

Out[11]= 

Find all interpretations for a food using an ambiguous unit of "cup":
In[12]:= 

Out[12]= 

Flatten the expression to see each interpretation:
In[13]:= 

Out[13]= 

Compare calorie amounts for different interpretations of the unit:
In[14]:= 

Out[14]= 

Unambiguous expressions are not restructured:
In[15]:= 

Out[15]= 

An alreadyflat AmbiguityList is not restructured:
In[16]:= 

Out[16]= 

Expressions containing AmbiguityList in deeper parts of an expression will be moved to the top level:
In[17]:= 

Out[17]= 

If ambiguity is present, a selection function that produces no matches returns an empty AmbiguityList:
In[18]:= 

Out[18]= 

When no ambiguity is present, the expression is left untouched:
In[19]:= 

Out[19]= 

Sometimes ambiguous expressions can produce a large number of possibilities, which can take excessive memory and computation time:
In[20]:= 

Out[21]= 

This work is licensed under a Creative Commons Attribution 4.0 International License