Type Trees

The following code snippet provides an easy way to print the type tree of logic circuits.

using InteractiveUtils;
using LogicCircuits;
using AbstractTrees;
AbstractTrees.children(x::Type) = subtypes(x);

For example, we can see LogicCircuits.LogicCircuit's type tree.

AbstractTrees.print_tree(LogicCircuit)
LogicCircuit
├─ PlainLogicCircuit
│  ├─ PlainLogicInnerNode
│  │  ├─ PlainConstantNode
│  │  ├─ Plain⋀Node
│  │  └─ Plain⋁Node
│  └─ PlainLogicLeafNode
│     └─ PlainLiteralNode
└─ StructLogicCircuit
   ├─ PlainStructLogicCircuit
   │  ├─ PlainStructLogicInnerNode
   │  │  ├─ PlainStructConstantNode
   │  │  ├─ PlainStruct⋀Node
   │  │  └─ PlainStruct⋁Node
   │  └─ PlainStructLogicLeafNode
   │     └─ PlainStructLiteralNode
   └─ Sdd
      ├─ SddInnerNode
      │  ├─ Sdd⋀Node
      │  └─ Sdd⋁Node
      └─ SddLeafNode
         ├─ SddConstantNode
         └─ SddLiteralNode

Alternatively, here's Vtree's type tree.

AbstractTrees.print_tree(Vtree)
Vtree
├─ PlainVtree
│  ├─ PlainVtreeInnerNode
│  └─ PlainVtreeLeafNode
└─ SddMgr
   ├─ SddMgrInnerNode
   └─ SddMgrLeafNode