How are taproot scripts represented normally?
I am fairly accustomed to the opcode type of writing down scripts. I can perceive the stack-based language nature of bitcoin script the place you possibly can write down totally different script spend paths by way of ifs like this:
OP_IF <3, publicKey1, publicKey2, publicKey3, 2, ...> OP_CHECKMULTISIGVERIFY OP_ELSE <7 days> OP_CHECKSEQUENCEVERIFY <3, publicKey1, publicKey2, publicKey3, 1, ...> OP_CHECKMULTISIGVERIFY OP_ENDIF
which might then be executed with a scriptSig like
"ignored" key1Sig 1 or
"ignored" key2Sig 0.
Nevertheless, I do not know a great way to jot down down spend paths for taproot. Eg, if I wish to say have a key spend-path utilizing a threshold signature, and I would like 3 script spend-paths, one among which has two nested script spend-paths, what’s a great way to signify that. Or slightly, how has that been represented prior to now? And the way does a transaction spending an output choose which taproot script spend-path it desires to make use of? Within the present script, one of many if branches is chosen with both 1 or 0 pushed onto the stack by way of the scriptSig. In Taproot, how is the spend path chosen?