\project thesis \startcomponent summary \startchapter [title={Summary}, reference=chap:summary-en] Bla \stopchapter \language[nl] \startchapter [title={Samenvatting}, reference=chap:summary-nl] Het {\it leren van automaten} speelt een steeds grotere rol bij de verificatie van software. Tijdens het leren, verkent een leeralgoritme het gedrag van software. Dit gaat in principe volledig automatisch, en het algoritme pakt vanzelf interessante eigenschappen op van de software. Het is hiermee mogelijk een redelijk precies model te maken van de werking van het stukje software wat we onder de loep nemen. Fouten en onverwacht gedrag van software kan hiermee worden blootgesteld. In dit proefschrift kijken we in eerste instantie naar technieken voor testgeneratie. Deze zijn nodig om het leeralgoritme een handje te helpen. Na het automatisch verkennen van gedrag, concludeert het leeralgoritme namelijk met een hypothese die helaas nog niet goed de software modelleert. Om de hypothese te verfijnen en verder te leren, hebben we tests nodig. {\it Effici\"entie} staat hierbij centraal: we willen zo min mogelijk testen, want dat kost tijd. Aan de andere kant moeten we wel {\it volledige testen}. Dat wil zeggen, als er een discrepantie is tussen het geleerde model en de software, dan willen we die met een test kunnen aanwijzen. In de eerste paar hoofdstukken laten we zien hoe testen van automaten te werk gaat. We geven een theoretisch kader om verschillende, bestaande {\it $n$-volledige testgeneratiemethodes} te vergelijken. Op grond hiervan beschrijven we een nieuw, effici\"ent algoritme. Dit nieuwe algoritme staat centraal bij een industri\"ele casus waarin we een model van complexe printer-software van Oc\'e leren. We laten ook zien hoe een van de deelproblemen -- het {\it onderscheiden van toestanden} met zo kort mogelijke invoer -- effici\"ent kan worden opgelost. Het tweede thema in dit proefschrift is de theorie van formele talen en automaten met {\it oneindige alfabetten}. Ook dit is zinnig voor het leren van automaten. Software, en in het bijzonder internet-communicatie-protocollen, maken namelijk vaak gebruik van identifiers om bijvoorbeeld verschillende gebruikers te onderscheiden. Als we oneindig veel van zulke identifiers aannemen, krijgen we de theorie van zogenaamde {\it nominal verzamelingen}. We laten zien hoe de theorie van nominal verzamelingen het ons mogelijk maakt de leeralgoritmes gemakkelijk te veralgemeniseren naar oneindige alfabetten. In het bijzonder betekent dit dat we registerautomaten kunnen leren. Vervolgens werken we de theorie van nominale automaten verder uit. We laten zien hoe je deze structuren effici\"ent kan implementeren. En we geven een speciale klasse van nominale automaten die een veel kleinere representatie hebben. Dit zou gebruikt kunnen worden om zulke systemen sneller te leren. \stopchapter \language[en] \stopcomponent