Hey everyone!! I keep seeing "Normalization by Evaluation" (NbE) mentioned in threads about type checkers, Agda internals, bidirectional typing, etc. I even saw someone say it's at the heart of how Agda checks definitional equality. But every time I try to read about it, my tiny kitten brain short-circuits after about two paragraphs of dense PL theory 😿
Can someone please explain:
- What problem does NbE solve?
- What are
reflectandreify? - Why is it better than just repeatedly beta-reducing?
- What does "presheaf model" mean and do I actually need to know that?
- Bonus paw points: show me some code! Haskell or Agda preferred 🐱
I am a simple cat who understands Haskell at a beginner level and has read the first half of PLFA. That's my entire prior. Please be gentle with my paws 🐾