## formal verification
### tl; dr
#### yul
* yul (previously also called julia) is an intermediate statically-typed language that can be compiled to bytecode for different backends.
* it's a good target for high-level optimisation stages, as it provides flexibility, speed, and interoperates easily with high-level solidity.
* programs written in yul are readable even if the code is generated by a compiler from solidity.
* because yul needs to be compiled to bytecode, it requires additional time to complete the entire compilation process, making it time-consuming during development.
----
### external resources
* **[lean prover](https://leanprover.github.io/)**
* **[solidity docs on yul](https://docs.soliditylang.org/en/v0.8.18/yul.html)**
* **[evm.codes (evm opcodes, by fork)](https://www.evm.codes/?fork=arrowGlacier)**
* **[solady, optimized solidy snippets](https://github.com/Vectorized/solady)**
* **[the darks arts of yul, by vectorized](https://www.youtube.com/watch?v=ew3pfnb2_V8)**
* **[optimising gas efficient whitelist contract in yul, by 0xmonsoon](https://mirror.xyz/0xCdC75C7d65d5c4cD0329DA74f979C6E1613d57A5/0ZsbpDeEzQhqFNRnsJhhkmPg1oXJCxH0SMkr5EZbaNc)**
* **[ethernaut solutions in yul](https://github.com/teddav/ethernaut-yul/)**