egglog 2.0.0

egglog is a language that combines the benefits of equality saturation and datalog. It can be used for analysis, optimization, and synthesis of programs. It is the successor to the popular rust library egg.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
1	{
2	str
3	:
4	[
5	{
6	str
7	:
8	str
9	,
10	str
11	:
12	{
13	str
14	:
15	str
16	,
17	str
18	:
19	num
20	,
21	str
22	:
23	{
24	str
25	:
26	num
27	,
28	str
29	:
30	num
31	}
32	,
33	str
34	:
35	str
36	,
37	str
38	:
39	num
40	,
41	str
42	:
43	{
44	str
45	:
46	num
47	,
48	str
49	:
50	str
51	,
52	str
53	:
54	str
55	,
56	str
57	:
58	str
59	,
60	str
61	:
62	str
63	,
64	str
65	:
66	str
67	}
68	,
69	str
70	:
71	{
72	str
73	:
74	str
75	,
76	str
77	:
78	str
79	}
80	}
81	}
82	,
83	{
84	str
85	:
86	str
87	,
88	str
89	:
90	{
91	str
92	:
93	str
94	,
95	str
96	:
97	num
98	,
99	str
100	:
101	{
102	str
103	:
104	num
105	,
106	str
107	:
108	num
109	}
110	,
111	str
112	:
113	str
114	,
115	str
116	:
117	num
118	,
119	str
120	:
121	{
122	str
123	:
124	num
125	,
126	str
127	:
128	str
129	,
130	str
131	:
132	str
133	,
134	str
135	:
136	str
137	,
138	str
139	:
140	str
141	,
142	str
143	:
144	str
145	}
146	,
147	str
148	:
149	{
150	str
151	:
152	str
153	,
154	str
155	:
156	str
157	}
158	}
159	}
160	,
161	{
162	str
163	:
164	str
165	,
166	str
167	:
168	{
169	str
170	:
171	str
172	,
173	str
174	:
175	num
176	,
177	str
178	:
179	{
180	str
181	:
182	num
183	,
184	str
185	:
186	num
187	}
188	,
189	str
190	:
191	str
192	,
193	str
194	:
195	num
196	,
197	str
198	:
199	{
200	str
201	:
202	num
203	,
204	str
205	:
206	str
207	,
208	str
209	:
210	str
211	,
212	str
213	:
214	str
215	,
216	str
217	:
218	str
219	,
220	str
221	:
222	str
223	}
224	,
225	str
226	:
227	{
228	str
229	:
230	str
231	,
232	str
233	:
234	str
235	}
236	}
237	}
238	,
239	{
240	str
241	:
242	str
243	,
244	str
245	:
246	{
247	str
248	:
249	str
250	,
251	str
252	:
253	num
254	,
255	str
256	:
257	{
258	str
259	:
260	num
261	,
262	str
263	:
264	num
265	}
266	,
267	str
268	:
269	str
270	,
271	str
272	:
273	num
274	,
275	str
276	:
277	{
278	str
279	:
280	num
281	,
282	str
283	:
284	str
285	,
286	str
287	:
288	str
289	,
290	str
291	:
292	str
293	,
294	str
295	:
296	str
297	,
298	str
299	:
300	str
301	}
302	,
303	str
304	:
305	{
306	str
307	:
308	str
309	,
310	str
311	:
312	str
313	}
314	}
315	}
316	,
317	{
318	str
319	:
320	str
321	,
322	str
323	:
324	{
325	str
326	:
327	str
328	,
329	str
330	:
331	num
332	,
333	str
334	:
335	{
336	str
337	:
338	num
339	,
340	str
341	:
342	num
343	}
344	,
345	str
346	:
347	str
348	,
349	str
350	:
351	num
352	,
353	str
354	:
355	{
356	str
357	:
358	num
359	,
360	str
361	:
362	str
363	,
364	str
365	:
366	str
367	,
368	str
369	:
370	str
371	,
372	str
373	:
374	str
375	,
376	str
377	:
378	str
379	}
380	,
381	str
382	:
383	{
384	str
385	:
386	str
387	,
388	str
389	:
390	str
391	}
392	}
393	}
394	,
395	{
396	str
397	:
398	str
399	,
400	str
401	:
402	{
403	str
404	:
405	str
406	,
407	str
408	:
409	num
410	,
411	str
412	:
413	{
414	str
415	:
416	num
417	,
418	str
419	:
420	num
421	}
422	,
423	str
424	:
425	str
426	,
427	str
428	:
429	num
430	,
431	str
432	:
433	{
434	str
435	:
436	num
437	,
438	str
439	:
440	str
441	,
442	str
443	:
444	str
445	,
446	str
447	:
448	str
449	,
450	str
451	:
452	str
453	,
454	str
455	:
456	str
457	}
458	,
459	str
460	:
461	{
462	str
463	:
464	str
465	,
466	str
467	:
468	str
469	}
470	}
471	}
472	,
473	{
474	str
475	:
476	str
477	,
478	str
479	:
480	{
481	str
482	:
483	str
484	,
485	str
486	:
487	num
488	,
489	str
490	:
491	{
492	str
493	:
494	num
495	,
496	str
497	:
498	num
499	}
500	,
501	str
502	:
503	str
504	,
505	str
506	:
507	num
508	,
509	str
510	:
511	{
512	str
513	:
514	num
515	,
516	str
517	:
518	str
519	,
520	str
521	:
522	str
523	,
524	str
525	:
526	str
527	,
528	str
529	:
530	str
531	,
532	str
533	:
534	str
535	}
536	,
537	str
538	:
539	{
540	str
541	:
542	str
543	,
544	str
545	:
546	str
547	}
548	}
549	}
550	,
551	{
552	str
553	:
554	str
555	,
556	str
557	:
558	{
559	str
560	:
561	str
562	,
563	str
564	:
565	num
566	,
567	str
568	:
569	{
570	str
571	:
572	num
573	,
574	str
575	:
576	num
577	}
578	,
579	str
580	:
581	str
582	,
583	str
584	:
585	num
586	,
587	str
588	:
589	{
590	str
591	:
592	num
593	,
594	str
595	:
596	str
597	,
598	str
599	:
600	str
601	,
602	str
603	:
604	str
605	,
606	str
607	:
608	str
609	,
610	str
611	:
612	str
613	}
614	,
615	str
616	:
617	{
618	str
619	:
620	str
621	,
622	str
623	:
624	str
625	}
626	}
627	}
628	,
629	{
630	str
631	:
632	str
633	,
634	str
635	:
636	{
637	str
638	:
639	str
640	,
641	str
642	:
643	num
644	,
645	str
646	:
647	{
648	str
649	:
650	num
651	,
652	str
653	:
654	num
655	}
656	,
657	str
658	:
659	str
660	,
661	str
662	:
663	num
664	,
665	str
666	:
667	{
668	str
669	:
670	num
671	,
672	str
673	:
674	str
675	,
676	str
677	:
678	str
679	,
680	str
681	:
682	str
683	,
684	str
685	:
686	str
687	,
688	str
689	:
690	str
691	}
692	,
693	str
694	:
695	{
696	str
697	:
698	str
699	,
700	str
701	:
702	str
703	}
704	}
705	}
706	,
707	{
708	str
709	:
710	str
711	,
712	str
713	:
714	{
715	str
716	:
717	str
718	,
719	str
720	:
721	num
722	,
723	str
724	:
725	{
726	str
727	:
728	num
729	,
730	str
731	:
732	num
733	}
734	,
735	str
736	:
737	str
738	,
739	str
740	:
741	num
742	,
743	str
744	:
745	{
746	str
747	:
748	num
749	,
750	str
751	:
752	str
753	,
754	str
755	:
756	str
757	,
758	str
759	:
760	str
761	,
762	str
763	:
764	str
765	,
766	str
767	:
768	str
769	}
770	,
771	str
772	:
773	{
774	str
775	:
776	str
777	,
778	str
779	:
780	str
781	}
782	}
783	}
784	]
785	,
786	str
787	:
788	{
789	str
790	:
791	str
792	,
793	str
794	:
795	num
796	,
797	str
798	:
799	num
800	}
801	}