-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathterms.v
2289 lines (2289 loc) · 697 KB
/
terms.v
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
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Require Import HOLLight_Real_With_N.mappings HOLLight.With_N Coq.NArith.BinNat Coq.Reals.Rbase Coq.Reals.Rdefinitions Coq.Reals.Rbasic_fun.
Require Import HOLLight.theory_hol.
Definition _FALSITY_ : Prop := False.
Lemma _FALSITY__def : _FALSITY_ = False.
Proof. exact (eq_refl _FALSITY_). Qed.
Lemma COND_def {A : Type'} : (@COND A) = (fun t : Prop => fun t1 : A => fun t2 : A => @ε A (fun x : A => ((t = True) -> x = t1) /\ ((t = False) -> x = t2))).
Proof. exact (eq_refl (@COND A)). Qed.
Definition o {A B C : Type'} : (B -> C) -> (A -> B) -> A -> C := fun f : B -> C => fun g : A -> B => fun x : A => f (g x).
Lemma o_def {A B C : Type'} : (@o A B C) = (fun f : B -> C => fun g : A -> B => fun x : A => f (g x)).
Proof. exact (eq_refl (@o A B C)). Qed.
Definition I {A : Type'} : A -> A := fun x : A => x.
Lemma I_def {A : Type'} : (@I A) = (fun x : A => x).
Proof. exact (eq_refl (@I A)). Qed.
Definition hashek : Prop := True.
Lemma hashek_def : hashek = True.
Proof. exact (eq_refl hashek). Qed.
Definition LET {A B : Type'} : (A -> B) -> A -> B := fun f : A -> B => fun x : A => f x.
Lemma LET_def {A B : Type'} : (@LET A B) = (fun f : A -> B => fun x : A => f x).
Proof. exact (eq_refl (@LET A B)). Qed.
Definition LET_END {A : Type'} : A -> A := fun t : A => t.
Lemma LET_END_def {A : Type'} : (@LET_END A) = (fun t : A => t).
Proof. exact (eq_refl (@LET_END A)). Qed.
Definition GABS {A : Type'} : (A -> Prop) -> A := fun P : A -> Prop => @ε A P.
Lemma GABS_def {A : Type'} : (@GABS A) = (fun P : A -> Prop => @ε A P).
Proof. exact (eq_refl (@GABS A)). Qed.
Definition GEQ {A : Type'} : A -> A -> Prop := fun a : A => fun b : A => a = b.
Lemma GEQ_def {A : Type'} : (@GEQ A) = (fun a : A => fun b : A => a = b).
Proof. exact (eq_refl (@GEQ A)). Qed.
Definition _SEQPATTERN {A B : Type'} : (A -> B -> Prop) -> (A -> B -> Prop) -> A -> B -> Prop := fun r : A -> B -> Prop => fun s : A -> B -> Prop => fun x : A => @COND (B -> Prop) (exists y : B, r x y) (r x) (s x).
Lemma _SEQPATTERN_def {A B : Type'} : (@_SEQPATTERN A B) = (fun r : A -> B -> Prop => fun s : A -> B -> Prop => fun x : A => @COND (B -> Prop) (exists y : B, r x y) (r x) (s x)).
Proof. exact (eq_refl (@_SEQPATTERN A B)). Qed.
Definition _UNGUARDED_PATTERN : Prop -> Prop -> Prop := fun p : Prop => fun r : Prop => p /\ r.
Lemma _UNGUARDED_PATTERN_def : _UNGUARDED_PATTERN = (fun p : Prop => fun r : Prop => p /\ r).
Proof. exact (eq_refl _UNGUARDED_PATTERN). Qed.
Definition _GUARDED_PATTERN : Prop -> Prop -> Prop -> Prop := fun p : Prop => fun g : Prop => fun r : Prop => p /\ (g /\ r).
Lemma _GUARDED_PATTERN_def : _GUARDED_PATTERN = (fun p : Prop => fun g : Prop => fun r : Prop => p /\ (g /\ r)).
Proof. exact (eq_refl _GUARDED_PATTERN). Qed.
Definition _MATCH {A B : Type'} : A -> (A -> B -> Prop) -> B := fun e : A => fun r : A -> B -> Prop => @COND B (@ex1 B (r e)) (@ε B (r e)) (@ε B (fun z : B => False)).
Lemma _MATCH_def {A B : Type'} : (@_MATCH A B) = (fun e : A => fun r : A -> B -> Prop => @COND B (@ex1 B (r e)) (@ε B (r e)) (@ε B (fun z : B => False))).
Proof. exact (eq_refl (@_MATCH A B)). Qed.
Definition _FUNCTION {A B : Type'} : (A -> B -> Prop) -> A -> B := fun r : A -> B -> Prop => fun x : A => @COND B (@ex1 B (r x)) (@ε B (r x)) (@ε B (fun z : B => False)).
Lemma _FUNCTION_def {A B : Type'} : (@_FUNCTION A B) = (fun r : A -> B -> Prop => fun x : A => @COND B (@ex1 B (r x)) (@ε B (r x)) (@ε B (fun z : B => False))).
Proof. exact (eq_refl (@_FUNCTION A B)). Qed.
Lemma mk_pair_def {A B : Type'} : (@mk_pair A B) = (fun x : A => fun y : B => fun a : A => fun b : B => (a = x) /\ (b = y)).
Proof. exact (eq_refl (@mk_pair A B)). Qed.
Definition CURRY {A B C : Type'} : ((prod A B) -> C) -> A -> B -> C := fun _1283 : (prod A B) -> C => fun _1284 : A => fun _1285 : B => _1283 (@pair A B _1284 _1285).
Lemma CURRY_def {A B C : Type'} : (@CURRY A B C) = (fun _1283 : (prod A B) -> C => fun _1284 : A => fun _1285 : B => _1283 (@pair A B _1284 _1285)).
Proof. exact (eq_refl (@CURRY A B C)). Qed.
Definition UNCURRY {A B C : Type'} : (A -> B -> C) -> (prod A B) -> C := fun _1304 : A -> B -> C => fun _1305 : prod A B => _1304 (@fst A B _1305) (@snd A B _1305).
Lemma UNCURRY_def {A B C : Type'} : (@UNCURRY A B C) = (fun _1304 : A -> B -> C => fun _1305 : prod A B => _1304 (@fst A B _1305) (@snd A B _1305)).
Proof. exact (eq_refl (@UNCURRY A B C)). Qed.
Definition PASSOC {A B C D : Type'} : ((prod (prod A B) C) -> D) -> (prod A (prod B C)) -> D := fun _1321 : (prod (prod A B) C) -> D => fun _1322 : prod A (prod B C) => _1321 (@pair (prod A B) C (@pair A B (@fst A (prod B C) _1322) (@fst B C (@snd A (prod B C) _1322))) (@snd B C (@snd A (prod B C) _1322))).
Lemma PASSOC_def {A B C D : Type'} : (@PASSOC A B C D) = (fun _1321 : (prod (prod A B) C) -> D => fun _1322 : prod A (prod B C) => _1321 (@pair (prod A B) C (@pair A B (@fst A (prod B C) _1322) (@fst B C (@snd A (prod B C) _1322))) (@snd B C (@snd A (prod B C) _1322)))).
Proof. exact (eq_refl (@PASSOC A B C D)). Qed.
Lemma ONE_ONE_def {A B : Type'} : (@ONE_ONE A B) = (fun _2064 : A -> B => forall x1 : A, forall x2 : A, ((_2064 x1) = (_2064 x2)) -> x1 = x2).
Proof. exact (eq_refl (@ONE_ONE A B)). Qed.
Lemma ONTO_def {A B : Type'} : (@ONTO A B) = (fun _2069 : A -> B => forall y : B, exists x : A, y = (_2069 x)).
Proof. exact (eq_refl (@ONTO A B)). Qed.
Lemma IND_SUC_def : IND_SUC = (@ε (ind -> ind) (fun f : ind -> ind => exists z : ind, (forall x1 : ind, forall x2 : ind, ((f x1) = (f x2)) = (x1 = x2)) /\ (forall x : ind, ~ ((f x) = z)))).
Proof. exact (eq_refl IND_SUC). Qed.
Lemma IND_0_def : IND_0 = (@ε ind (fun z : ind => (forall x1 : ind, forall x2 : ind, ((IND_SUC x1) = (IND_SUC x2)) = (x1 = x2)) /\ (forall x : ind, ~ ((IND_SUC x) = z)))).
Proof. exact (eq_refl IND_0). Qed.
Lemma NUM_REP_def : NUM_REP = (fun a : ind => forall NUM_REP' : ind -> Prop, (forall a' : ind, ((a' = IND_0) \/ (exists i : ind, (a' = (IND_SUC i)) /\ (NUM_REP' i))) -> NUM_REP' a') -> NUM_REP' a).
Proof. exact (eq_refl NUM_REP). Qed.
Definition NUMERAL : N -> N := fun _2128 : N => _2128.
Lemma NUMERAL_def : NUMERAL = (fun _2128 : N => _2128).
Proof. exact (eq_refl NUMERAL). Qed.
Lemma BIT1_def : BIT1 = (fun _2143 : N => N.succ (BIT0 _2143)).
Proof. exact (eq_refl BIT1). Qed.
Definition EVEN : N -> Prop := @ε ((prod N (prod N (prod N N))) -> N -> Prop) (fun EVEN' : (prod N (prod N (prod N N))) -> N -> Prop => forall _2603 : prod N (prod N (prod N N)), ((EVEN' _2603 (NUMERAL 0%N)) = True) /\ (forall n : N, (EVEN' _2603 (N.succ n)) = (~ (EVEN' _2603 n)))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N))))))))))).
Lemma EVEN_def : EVEN = (@ε ((prod N (prod N (prod N N))) -> N -> Prop) (fun EVEN' : (prod N (prod N (prod N N))) -> N -> Prop => forall _2603 : prod N (prod N (prod N N)), ((EVEN' _2603 (NUMERAL 0%N)) = True) /\ (forall n : N, (EVEN' _2603 (N.succ n)) = (~ (EVEN' _2603 n)))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))))))).
Proof. exact (eq_refl EVEN). Qed.
Definition ODD : N -> Prop := @ε ((prod N (prod N N)) -> N -> Prop) (fun ODD' : (prod N (prod N N)) -> N -> Prop => forall _2607 : prod N (prod N N), ((ODD' _2607 (NUMERAL 0%N)) = False) /\ (forall n : N, (ODD' _2607 (N.succ n)) = (~ (ODD' _2607 n)))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))))).
Lemma ODD_def : ODD = (@ε ((prod N (prod N N)) -> N -> Prop) (fun ODD' : (prod N (prod N N)) -> N -> Prop => forall _2607 : prod N (prod N N), ((ODD' _2607 (NUMERAL 0%N)) = False) /\ (forall n : N, (ODD' _2607 (N.succ n)) = (~ (ODD' _2607 n)))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N))))))))))).
Proof. exact (eq_refl ODD). Qed.
Definition FACT : N -> N := @ε ((prod N (prod N (prod N N))) -> N -> N) (fun FACT' : (prod N (prod N (prod N N))) -> N -> N => forall _2944 : prod N (prod N (prod N N)), ((FACT' _2944 (NUMERAL 0%N)) = (NUMERAL (BIT1 0%N))) /\ (forall n : N, (FACT' _2944 (N.succ n)) = (N.mul (N.succ n) (FACT' _2944 n)))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N))))))))))).
Lemma FACT_def : FACT = (@ε ((prod N (prod N (prod N N))) -> N -> N) (fun FACT' : (prod N (prod N (prod N N))) -> N -> N => forall _2944 : prod N (prod N (prod N N)), ((FACT' _2944 (NUMERAL 0%N)) = (NUMERAL (BIT1 0%N))) /\ (forall n : N, (FACT' _2944 (N.succ n)) = (N.mul (N.succ n) (FACT' _2944 n)))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))))))).
Proof. exact (eq_refl FACT). Qed.
Definition minimal : (N -> Prop) -> N := fun _6536 : N -> Prop => @ε N (fun n : N => (_6536 n) /\ (forall m : N, (N.lt m n) -> ~ (_6536 m))).
Lemma minimal_def : minimal = (fun _6536 : N -> Prop => @ε N (fun n : N => (_6536 n) /\ (forall m : N, (N.lt m n) -> ~ (_6536 m)))).
Proof. exact (eq_refl minimal). Qed.
Definition WF {A : Type'} : (A -> A -> Prop) -> Prop := fun _6923 : A -> A -> Prop => forall P : A -> Prop, (exists x : A, P x) -> exists x : A, (P x) /\ (forall y : A, (_6923 y x) -> ~ (P y)).
Lemma WF_def {A : Type'} : (@WF A) = (fun _6923 : A -> A -> Prop => forall P : A -> Prop, (exists x : A, P x) -> exists x : A, (P x) /\ (forall y : A, (_6923 y x) -> ~ (P y))).
Proof. exact (eq_refl (@WF A)). Qed.
Definition MEASURE {A : Type'} : (A -> N) -> A -> A -> Prop := fun _8094 : A -> N => fun x : A => fun y : A => N.lt (_8094 x) (_8094 y).
Lemma MEASURE_def {A : Type'} : (@MEASURE A) = (fun _8094 : A -> N => fun x : A => fun y : A => N.lt (_8094 x) (_8094 y)).
Proof. exact (eq_refl (@MEASURE A)). Qed.
Definition NUMPAIR : N -> N -> N := fun _17487 : N => fun _17488 : N => N.mul (N.pow (NUMERAL (BIT0 (BIT1 0%N))) _17487) (N.add (N.mul (NUMERAL (BIT0 (BIT1 0%N))) _17488) (NUMERAL (BIT1 0%N))).
Lemma NUMPAIR_def : NUMPAIR = (fun _17487 : N => fun _17488 : N => N.mul (N.pow (NUMERAL (BIT0 (BIT1 0%N))) _17487) (N.add (N.mul (NUMERAL (BIT0 (BIT1 0%N))) _17488) (NUMERAL (BIT1 0%N)))).
Proof. exact (eq_refl NUMPAIR). Qed.
Definition NUMFST : N -> N := @ε ((prod N (prod N (prod N (prod N (prod N N))))) -> N -> N) (fun X : (prod N (prod N (prod N (prod N (prod N N))))) -> N -> N => forall _17503 : prod N (prod N (prod N (prod N (prod N N)))), exists Y : N -> N, forall x : N, forall y : N, ((X _17503 (NUMPAIR x y)) = x) /\ ((Y (NUMPAIR x y)) = y)) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N))))))))))))).
Lemma NUMFST_def : NUMFST = (@ε ((prod N (prod N (prod N (prod N (prod N N))))) -> N -> N) (fun X : (prod N (prod N (prod N (prod N (prod N N))))) -> N -> N => forall _17503 : prod N (prod N (prod N (prod N (prod N N)))), exists Y : N -> N, forall x : N, forall y : N, ((X _17503 (NUMPAIR x y)) = x) /\ ((Y (NUMPAIR x y)) = y)) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))))))))).
Proof. exact (eq_refl NUMFST). Qed.
Definition NUMSND : N -> N := @ε ((prod N (prod N (prod N (prod N (prod N N))))) -> N -> N) (fun Y : (prod N (prod N (prod N (prod N (prod N N))))) -> N -> N => forall _17504 : prod N (prod N (prod N (prod N (prod N N)))), forall x : N, forall y : N, ((NUMFST (NUMPAIR x y)) = x) /\ ((Y _17504 (NUMPAIR x y)) = y)) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N))))))))))))).
Lemma NUMSND_def : NUMSND = (@ε ((prod N (prod N (prod N (prod N (prod N N))))) -> N -> N) (fun Y : (prod N (prod N (prod N (prod N (prod N N))))) -> N -> N => forall _17504 : prod N (prod N (prod N (prod N (prod N N)))), forall x : N, forall y : N, ((NUMFST (NUMPAIR x y)) = x) /\ ((Y _17504 (NUMPAIR x y)) = y)) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))))))))).
Proof. exact (eq_refl NUMSND). Qed.
Definition NUMSUM : Prop -> N -> N := fun _17505 : Prop => fun _17506 : N => @COND N _17505 (N.succ (N.mul (NUMERAL (BIT0 (BIT1 0%N))) _17506)) (N.mul (NUMERAL (BIT0 (BIT1 0%N))) _17506).
Lemma NUMSUM_def : NUMSUM = (fun _17505 : Prop => fun _17506 : N => @COND N _17505 (N.succ (N.mul (NUMERAL (BIT0 (BIT1 0%N))) _17506)) (N.mul (NUMERAL (BIT0 (BIT1 0%N))) _17506)).
Proof. exact (eq_refl NUMSUM). Qed.
Definition INJN {A : Type'} : N -> N -> A -> Prop := fun _17537 : N => fun n : N => fun a : A => n = _17537.
Lemma INJN_def {A : Type'} : (@INJN A) = (fun _17537 : N => fun n : N => fun a : A => n = _17537).
Proof. exact (eq_refl (@INJN A)). Qed.
Definition INJA {A : Type'} : A -> N -> A -> Prop := fun _17542 : A => fun n : N => fun b : A => b = _17542.
Lemma INJA_def {A : Type'} : (@INJA A) = (fun _17542 : A => fun n : N => fun b : A => b = _17542).
Proof. exact (eq_refl (@INJA A)). Qed.
Definition INJF {A : Type'} : (N -> N -> A -> Prop) -> N -> A -> Prop := fun _17549 : N -> N -> A -> Prop => fun n : N => _17549 (NUMFST n) (NUMSND n).
Lemma INJF_def {A : Type'} : (@INJF A) = (fun _17549 : N -> N -> A -> Prop => fun n : N => _17549 (NUMFST n) (NUMSND n)).
Proof. exact (eq_refl (@INJF A)). Qed.
Definition INJP {A : Type'} : (N -> A -> Prop) -> (N -> A -> Prop) -> N -> A -> Prop := fun _17554 : N -> A -> Prop => fun _17555 : N -> A -> Prop => fun n : N => fun a : A => @COND Prop (NUMLEFT n) (_17554 (NUMRIGHT n) a) (_17555 (NUMRIGHT n) a).
Lemma INJP_def {A : Type'} : (@INJP A) = (fun _17554 : N -> A -> Prop => fun _17555 : N -> A -> Prop => fun n : N => fun a : A => @COND Prop (NUMLEFT n) (_17554 (NUMRIGHT n) a) (_17555 (NUMRIGHT n) a)).
Proof. exact (eq_refl (@INJP A)). Qed.
Definition ZCONSTR {A : Type'} : N -> A -> (N -> N -> A -> Prop) -> N -> A -> Prop := fun _17566 : N => fun _17567 : A => fun _17568 : N -> N -> A -> Prop => @INJP A (@INJN A (N.succ _17566)) (@INJP A (@INJA A _17567) (@INJF A _17568)).
Lemma ZCONSTR_def {A : Type'} : (@ZCONSTR A) = (fun _17566 : N => fun _17567 : A => fun _17568 : N -> N -> A -> Prop => @INJP A (@INJN A (N.succ _17566)) (@INJP A (@INJA A _17567) (@INJF A _17568))).
Proof. exact (eq_refl (@ZCONSTR A)). Qed.
Definition ZBOT {A : Type'} : N -> A -> Prop := @INJP A (@INJN A (NUMERAL 0%N)) (@ε (N -> A -> Prop) (fun z : N -> A -> Prop => True)).
Lemma ZBOT_def {A : Type'} : (@ZBOT A) = (@INJP A (@INJN A (NUMERAL 0%N)) (@ε (N -> A -> Prop) (fun z : N -> A -> Prop => True))).
Proof. exact (eq_refl (@ZBOT A)). Qed.
Definition BOTTOM {A : Type'} : recspace A := @_mk_rec A (@ZBOT A).
Lemma BOTTOM_def {A : Type'} : (@BOTTOM A) = (@_mk_rec A (@ZBOT A)).
Proof. exact (eq_refl (@BOTTOM A)). Qed.
Definition CONSTR {A : Type'} : N -> A -> (N -> recspace A) -> recspace A := fun _17591 : N => fun _17592 : A => fun _17593 : N -> recspace A => @_mk_rec A (@ZCONSTR A _17591 _17592 (fun n : N => @_dest_rec A (_17593 n))).
Lemma CONSTR_def {A : Type'} : (@CONSTR A) = (fun _17591 : N => fun _17592 : A => fun _17593 : N -> recspace A => @_mk_rec A (@ZCONSTR A _17591 _17592 (fun n : N => @_dest_rec A (_17593 n)))).
Proof. exact (eq_refl (@CONSTR A)). Qed.
Definition FNIL {A : Type'} : N -> A := fun _17624 : N => @ε A (fun x : A => True).
Lemma FNIL_def {A : Type'} : (@FNIL A) = (fun _17624 : N => @ε A (fun x : A => True)).
Proof. exact (eq_refl (@FNIL A)). Qed.
Definition OUTL {A B : Type'} : (Datatypes.sum A B) -> A := @ε ((prod N (prod N (prod N N))) -> (Datatypes.sum A B) -> A) (fun OUTL' : (prod N (prod N (prod N N))) -> (Datatypes.sum A B) -> A => forall _17649 : prod N (prod N (prod N N)), forall x : A, (OUTL' _17649 (@inl A B x)) = x) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N))))))))))).
Lemma OUTL_def {A B : Type'} : (@OUTL A B) = (@ε ((prod N (prod N (prod N N))) -> (Datatypes.sum A B) -> A) (fun OUTL' : (prod N (prod N (prod N N))) -> (Datatypes.sum A B) -> A => forall _17649 : prod N (prod N (prod N N)), forall x : A, (OUTL' _17649 (@inl A B x)) = x) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))))))).
Proof. exact (eq_refl (@OUTL A B)). Qed.
Definition OUTR {A B : Type'} : (Datatypes.sum A B) -> B := @ε ((prod N (prod N (prod N N))) -> (Datatypes.sum A B) -> B) (fun OUTR' : (prod N (prod N (prod N N))) -> (Datatypes.sum A B) -> B => forall _17651 : prod N (prod N (prod N N)), forall y : B, (OUTR' _17651 (@inr A B y)) = y) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N))))))))))).
Lemma OUTR_def {A B : Type'} : (@OUTR A B) = (@ε ((prod N (prod N (prod N N))) -> (Datatypes.sum A B) -> B) (fun OUTR' : (prod N (prod N (prod N N))) -> (Datatypes.sum A B) -> B => forall _17651 : prod N (prod N (prod N N)), forall y : B, (OUTR' _17651 (@inr A B y)) = y) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))))))).
Proof. exact (eq_refl (@OUTR A B)). Qed.
Definition LENGTH {A : Type'} : (list A) -> N := @ε ((prod N (prod N (prod N (prod N (prod N N))))) -> (list A) -> N) (fun LENGTH' : (prod N (prod N (prod N (prod N (prod N N))))) -> (list A) -> N => forall _18106 : prod N (prod N (prod N (prod N (prod N N)))), ((LENGTH' _18106 (@nil A)) = (NUMERAL 0%N)) /\ (forall h : A, forall t : list A, (LENGTH' _18106 (@cons A h t)) = (N.succ (LENGTH' _18106 t)))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N))))))))))))).
Lemma LENGTH_def {A : Type'} : (@LENGTH A) = (@ε ((prod N (prod N (prod N (prod N (prod N N))))) -> (list A) -> N) (fun LENGTH' : (prod N (prod N (prod N (prod N (prod N N))))) -> (list A) -> N => forall _18106 : prod N (prod N (prod N (prod N (prod N N)))), ((LENGTH' _18106 (@nil A)) = (NUMERAL 0%N)) /\ (forall h : A, forall t : list A, (LENGTH' _18106 (@cons A h t)) = (N.succ (LENGTH' _18106 t)))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))))))))).
Proof. exact (eq_refl (@LENGTH A)). Qed.
Definition LAST {A : Type'} : (list A) -> A := @ε ((prod N (prod N (prod N N))) -> (list A) -> A) (fun LAST' : (prod N (prod N (prod N N))) -> (list A) -> A => forall _18117 : prod N (prod N (prod N N)), forall h : A, forall t : list A, (LAST' _18117 (@cons A h t)) = (@COND A (t = (@nil A)) h (LAST' _18117 t))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N))))))))))).
Lemma LAST_def {A : Type'} : (@LAST A) = (@ε ((prod N (prod N (prod N N))) -> (list A) -> A) (fun LAST' : (prod N (prod N (prod N N))) -> (list A) -> A => forall _18117 : prod N (prod N (prod N N)), forall h : A, forall t : list A, (LAST' _18117 (@cons A h t)) = (@COND A (t = (@nil A)) h (LAST' _18117 t))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))))))).
Proof. exact (eq_refl (@LAST A)). Qed.
Definition REPLICATE {A : Type'} : N -> A -> list A := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) -> N -> A -> list A) (fun REPLICATE' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) -> N -> A -> list A => forall _18125 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))), (forall x : A, (REPLICATE' _18125 (NUMERAL 0%N) x) = (@nil A)) /\ (forall n : N, forall x : A, (REPLICATE' _18125 (N.succ n) x) = (@cons A x (REPLICATE' _18125 n x)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))))))))))).
Lemma REPLICATE_def {A : Type'} : (@REPLICATE A) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) -> N -> A -> list A) (fun REPLICATE' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) -> N -> A -> list A => forall _18125 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))), (forall x : A, (REPLICATE' _18125 (NUMERAL 0%N) x) = (@nil A)) /\ (forall n : N, forall x : A, (REPLICATE' _18125 (N.succ n) x) = (@cons A x (REPLICATE' _18125 n x)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N))))))))))))))))).
Proof. exact (eq_refl (@REPLICATE A)). Qed.
Definition NULL {A : Type'} : (list A) -> Prop := @ε ((prod N (prod N (prod N N))) -> (list A) -> Prop) (fun NULL' : (prod N (prod N (prod N N))) -> (list A) -> Prop => forall _18129 : prod N (prod N (prod N N)), ((NULL' _18129 (@nil A)) = True) /\ (forall h : A, forall t : list A, (NULL' _18129 (@cons A h t)) = False)) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N))))))))))).
Lemma NULL_def {A : Type'} : (@NULL A) = (@ε ((prod N (prod N (prod N N))) -> (list A) -> Prop) (fun NULL' : (prod N (prod N (prod N N))) -> (list A) -> Prop => forall _18129 : prod N (prod N (prod N N)), ((NULL' _18129 (@nil A)) = True) /\ (forall h : A, forall t : list A, (NULL' _18129 (@cons A h t)) = False)) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))))))).
Proof. exact (eq_refl (@NULL A)). Qed.
Definition EX {A : Type'} : (A -> Prop) -> (list A) -> Prop := @ε ((prod N N) -> (A -> Prop) -> (list A) -> Prop) (fun EX' : (prod N N) -> (A -> Prop) -> (list A) -> Prop => forall _18143 : prod N N, (forall P : A -> Prop, (EX' _18143 P (@nil A)) = False) /\ (forall h : A, forall P : A -> Prop, forall t : list A, (EX' _18143 P (@cons A h t)) = ((P h) \/ (EX' _18143 P t)))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 0%N))))))))).
Lemma EX_def {A : Type'} : (@EX A) = (@ε ((prod N N) -> (A -> Prop) -> (list A) -> Prop) (fun EX' : (prod N N) -> (A -> Prop) -> (list A) -> Prop => forall _18143 : prod N N, (forall P : A -> Prop, (EX' _18143 P (@nil A)) = False) /\ (forall h : A, forall P : A -> Prop, forall t : list A, (EX' _18143 P (@cons A h t)) = ((P h) \/ (EX' _18143 P t)))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))))).
Proof. exact (eq_refl (@EX A)). Qed.
Definition ITLIST {A B : Type'} : (A -> B -> B) -> (list A) -> B -> B := @ε ((prod N (prod N (prod N (prod N (prod N N))))) -> (A -> B -> B) -> (list A) -> B -> B) (fun ITLIST' : (prod N (prod N (prod N (prod N (prod N N))))) -> (A -> B -> B) -> (list A) -> B -> B => forall _18151 : prod N (prod N (prod N (prod N (prod N N)))), (forall f : A -> B -> B, forall b : B, (ITLIST' _18151 f (@nil A) b) = b) /\ (forall h : A, forall f : A -> B -> B, forall t : list A, forall b : B, (ITLIST' _18151 f (@cons A h t) b) = (f h (ITLIST' _18151 f t b)))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N))))))))))))).
Lemma ITLIST_def {A B : Type'} : (@ITLIST A B) = (@ε ((prod N (prod N (prod N (prod N (prod N N))))) -> (A -> B -> B) -> (list A) -> B -> B) (fun ITLIST' : (prod N (prod N (prod N (prod N (prod N N))))) -> (A -> B -> B) -> (list A) -> B -> B => forall _18151 : prod N (prod N (prod N (prod N (prod N N)))), (forall f : A -> B -> B, forall b : B, (ITLIST' _18151 f (@nil A) b) = b) /\ (forall h : A, forall f : A -> B -> B, forall t : list A, forall b : B, (ITLIST' _18151 f (@cons A h t) b) = (f h (ITLIST' _18151 f t b)))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))))))))).
Proof. exact (eq_refl (@ITLIST A B)). Qed.
Definition ALL2 {A B : Type'} : (A -> B -> Prop) -> (list A) -> (list B) -> Prop := @ε ((prod N (prod N (prod N N))) -> (A -> B -> Prop) -> (list A) -> (list B) -> Prop) (fun ALL2' : (prod N (prod N (prod N N))) -> (A -> B -> Prop) -> (list A) -> (list B) -> Prop => forall _18166 : prod N (prod N (prod N N)), (forall P : A -> B -> Prop, forall l2 : list B, (ALL2' _18166 P (@nil A) l2) = (l2 = (@nil B))) /\ (forall h1' : A, forall P : A -> B -> Prop, forall t1 : list A, forall l2 : list B, (ALL2' _18166 P (@cons A h1' t1) l2) = (@COND Prop (l2 = (@nil B)) False ((P h1' (@hd B l2)) /\ (ALL2' _18166 P t1 (@tl B l2)))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))))).
Lemma ALL2_def {A B : Type'} : (@ALL2 A B) = (@ε ((prod N (prod N (prod N N))) -> (A -> B -> Prop) -> (list A) -> (list B) -> Prop) (fun ALL2' : (prod N (prod N (prod N N))) -> (A -> B -> Prop) -> (list A) -> (list B) -> Prop => forall _18166 : prod N (prod N (prod N N)), (forall P : A -> B -> Prop, forall l2 : list B, (ALL2' _18166 P (@nil A) l2) = (l2 = (@nil B))) /\ (forall h1' : A, forall P : A -> B -> Prop, forall t1 : list A, forall l2 : list B, (ALL2' _18166 P (@cons A h1' t1) l2) = (@COND Prop (l2 = (@nil B)) False ((P h1' (@hd B l2)) /\ (ALL2' _18166 P t1 (@tl B l2)))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N))))))))))).
Proof. exact (eq_refl (@ALL2 A B)). Qed.
Definition MAP2 {A B C : Type'} : (A -> B -> C) -> (list A) -> (list B) -> list C := @ε ((prod N (prod N (prod N N))) -> (A -> B -> C) -> (list A) -> (list B) -> list C) (fun MAP2' : (prod N (prod N (prod N N))) -> (A -> B -> C) -> (list A) -> (list B) -> list C => forall _18174 : prod N (prod N (prod N N)), (forall f : A -> B -> C, forall l : list B, (MAP2' _18174 f (@nil A) l) = (@nil C)) /\ (forall h1' : A, forall f : A -> B -> C, forall t1 : list A, forall l : list B, (MAP2' _18174 f (@cons A h1' t1) l) = (@cons C (f h1' (@hd B l)) (MAP2' _18174 f t1 (@tl B l))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))))).
Lemma MAP2_def {A B C : Type'} : (@MAP2 A B C) = (@ε ((prod N (prod N (prod N N))) -> (A -> B -> C) -> (list A) -> (list B) -> list C) (fun MAP2' : (prod N (prod N (prod N N))) -> (A -> B -> C) -> (list A) -> (list B) -> list C => forall _18174 : prod N (prod N (prod N N)), (forall f : A -> B -> C, forall l : list B, (MAP2' _18174 f (@nil A) l) = (@nil C)) /\ (forall h1' : A, forall f : A -> B -> C, forall t1 : list A, forall l : list B, (MAP2' _18174 f (@cons A h1' t1) l) = (@cons C (f h1' (@hd B l)) (MAP2' _18174 f t1 (@tl B l))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N))))))))))).
Proof. exact (eq_refl (@MAP2 A B C)). Qed.
Definition EL {A : Type'} : N -> (list A) -> A := @ε ((prod N N) -> N -> (list A) -> A) (fun EL' : (prod N N) -> N -> (list A) -> A => forall _18178 : prod N N, (forall l : list A, (EL' _18178 (NUMERAL 0%N) l) = (@hd A l)) /\ (forall n : N, forall l : list A, (EL' _18178 (N.succ n) l) = (EL' _18178 n (@tl A l)))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N))))))))).
Lemma EL_def {A : Type'} : (@EL A) = (@ε ((prod N N) -> N -> (list A) -> A) (fun EL' : (prod N N) -> N -> (list A) -> A => forall _18178 : prod N N, (forall l : list A, (EL' _18178 (NUMERAL 0%N) l) = (@hd A l)) /\ (forall n : N, forall l : list A, (EL' _18178 (N.succ n) l) = (EL' _18178 n (@tl A l)))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))))).
Proof. exact (eq_refl (@EL A)). Qed.
Definition FILTER {A : Type'} : (A -> Prop) -> (list A) -> list A := @ε ((prod N (prod N (prod N (prod N (prod N N))))) -> (A -> Prop) -> (list A) -> list A) (fun FILTER' : (prod N (prod N (prod N (prod N (prod N N))))) -> (A -> Prop) -> (list A) -> list A => forall _18185 : prod N (prod N (prod N (prod N (prod N N)))), (forall P : A -> Prop, (FILTER' _18185 P (@nil A)) = (@nil A)) /\ (forall h : A, forall P : A -> Prop, forall t : list A, (FILTER' _18185 P (@cons A h t)) = (@COND (list A) (P h) (@cons A h (FILTER' _18185 P t)) (FILTER' _18185 P t)))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N))))))))))))).
Lemma FILTER_def {A : Type'} : (@FILTER A) = (@ε ((prod N (prod N (prod N (prod N (prod N N))))) -> (A -> Prop) -> (list A) -> list A) (fun FILTER' : (prod N (prod N (prod N (prod N (prod N N))))) -> (A -> Prop) -> (list A) -> list A => forall _18185 : prod N (prod N (prod N (prod N (prod N N)))), (forall P : A -> Prop, (FILTER' _18185 P (@nil A)) = (@nil A)) /\ (forall h : A, forall P : A -> Prop, forall t : list A, (FILTER' _18185 P (@cons A h t)) = (@COND (list A) (P h) (@cons A h (FILTER' _18185 P t)) (FILTER' _18185 P t)))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))))))))).
Proof. exact (eq_refl (@FILTER A)). Qed.
Definition ASSOC {A B : Type'} : A -> (list (prod A B)) -> B := @ε ((prod N (prod N (prod N (prod N N)))) -> A -> (list (prod A B)) -> B) (fun ASSOC' : (prod N (prod N (prod N (prod N N)))) -> A -> (list (prod A B)) -> B => forall _18192 : prod N (prod N (prod N (prod N N))), forall h : prod A B, forall a : A, forall t : list (prod A B), (ASSOC' _18192 a (@cons (prod A B) h t)) = (@COND B ((@fst A B h) = a) (@snd A B h) (ASSOC' _18192 a t))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))))))).
Lemma ASSOC_def {A B : Type'} : (@ASSOC A B) = (@ε ((prod N (prod N (prod N (prod N N)))) -> A -> (list (prod A B)) -> B) (fun ASSOC' : (prod N (prod N (prod N (prod N N)))) -> A -> (list (prod A B)) -> B => forall _18192 : prod N (prod N (prod N (prod N N))), forall h : prod A B, forall a : A, forall t : list (prod A B), (ASSOC' _18192 a (@cons (prod A B) h t)) = (@COND B ((@fst A B h) = a) (@snd A B h) (ASSOC' _18192 a t))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N))))))))))))).
Proof. exact (eq_refl (@ASSOC A B)). Qed.
Definition ITLIST2 {A B C : Type'} : (A -> B -> C -> C) -> (list A) -> (list B) -> C -> C := @ε ((prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (A -> B -> C -> C) -> (list A) -> (list B) -> C -> C) (fun ITLIST2' : (prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (A -> B -> C -> C) -> (list A) -> (list B) -> C -> C => forall _18201 : prod N (prod N (prod N (prod N (prod N (prod N N))))), (forall f : A -> B -> C -> C, forall l2 : list B, forall b : C, (ITLIST2' _18201 f (@nil A) l2 b) = b) /\ (forall h1' : A, forall f : A -> B -> C -> C, forall t1 : list A, forall l2 : list B, forall b : C, (ITLIST2' _18201 f (@cons A h1' t1) l2 b) = (f h1' (@hd B l2) (ITLIST2' _18201 f t1 (@tl B l2) b)))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N))))))))))))).
Lemma ITLIST2_def {A B C : Type'} : (@ITLIST2 A B C) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (A -> B -> C -> C) -> (list A) -> (list B) -> C -> C) (fun ITLIST2' : (prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (A -> B -> C -> C) -> (list A) -> (list B) -> C -> C => forall _18201 : prod N (prod N (prod N (prod N (prod N (prod N N))))), (forall f : A -> B -> C -> C, forall l2 : list B, forall b : C, (ITLIST2' _18201 f (@nil A) l2 b) = b) /\ (forall h1' : A, forall f : A -> B -> C -> C, forall t1 : list A, forall l2 : list B, forall b : C, (ITLIST2' _18201 f (@cons A h1' t1) l2 b) = (f h1' (@hd B l2) (ITLIST2' _18201 f t1 (@tl B l2) b)))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))))))))).
Proof. exact (eq_refl (@ITLIST2 A B C)). Qed.
Definition ZIP {A B : Type'} : (list A) -> (list B) -> list (prod A B) := @ε ((prod N (prod N N)) -> (list A) -> (list B) -> list (prod A B)) (fun ZIP' : (prod N (prod N N)) -> (list A) -> (list B) -> list (prod A B) => forall _18205 : prod N (prod N N), (forall l2 : list B, (ZIP' _18205 (@nil A) l2) = (@nil (prod A B))) /\ (forall h1' : A, forall t1 : list A, forall l2 : list B, (ZIP' _18205 (@cons A h1' t1) l2) = (@cons (prod A B) (@pair A B h1' (@hd B l2)) (ZIP' _18205 t1 (@tl B l2))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))))).
Lemma ZIP_def {A B : Type'} : (@ZIP A B) = (@ε ((prod N (prod N N)) -> (list A) -> (list B) -> list (prod A B)) (fun ZIP' : (prod N (prod N N)) -> (list A) -> (list B) -> list (prod A B) => forall _18205 : prod N (prod N N), (forall l2 : list B, (ZIP' _18205 (@nil A) l2) = (@nil (prod A B))) /\ (forall h1' : A, forall t1 : list A, forall l2 : list B, (ZIP' _18205 (@cons A h1' t1) l2) = (@cons (prod A B) (@pair A B h1' (@hd B l2)) (ZIP' _18205 t1 (@tl B l2))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N))))))))))).
Proof. exact (eq_refl (@ZIP A B)). Qed.
Definition ALLPAIRS {A B : Type'} : (A -> B -> Prop) -> (list A) -> (list B) -> Prop := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> (A -> B -> Prop) -> (list A) -> (list B) -> Prop) (fun ALLPAIRS' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> (A -> B -> Prop) -> (list A) -> (list B) -> Prop => forall _18213 : prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))), (forall f : A -> B -> Prop, forall l : list B, (ALLPAIRS' _18213 f (@nil A) l) = True) /\ (forall h : A, forall f : A -> B -> Prop, forall t : list A, forall l : list B, (ALLPAIRS' _18213 f (@cons A h t) l) = ((@List.Forall B (f h) l) /\ (ALLPAIRS' _18213 f t l)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N))))))))))))))).
Lemma ALLPAIRS_def {A B : Type'} : (@ALLPAIRS A B) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> (A -> B -> Prop) -> (list A) -> (list B) -> Prop) (fun ALLPAIRS' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> (A -> B -> Prop) -> (list A) -> (list B) -> Prop => forall _18213 : prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))), (forall f : A -> B -> Prop, forall l : list B, (ALLPAIRS' _18213 f (@nil A) l) = True) /\ (forall h : A, forall f : A -> B -> Prop, forall t : list A, forall l : list B, (ALLPAIRS' _18213 f (@cons A h t) l) = ((@List.Forall B (f h) l) /\ (ALLPAIRS' _18213 f t l)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))))))))))).
Proof. exact (eq_refl (@ALLPAIRS A B)). Qed.
Definition list_of_seq {A : Type'} : (N -> A) -> N -> list A := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (N -> A) -> N -> list A) (fun list_of_seq' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (N -> A) -> N -> list A => forall _18227 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))), (forall s : N -> A, (list_of_seq' _18227 s (NUMERAL 0%N)) = (@nil A)) /\ (forall s : N -> A, forall n : N, (list_of_seq' _18227 s (N.succ n)) = (@List.app A (list_of_seq' _18227 s n) (@cons A (s n) (@nil A))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))))))))))))).
Lemma list_of_seq_def {A : Type'} : (@list_of_seq A) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (N -> A) -> N -> list A) (fun list_of_seq' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (N -> A) -> N -> list A => forall _18227 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))), (forall s : N -> A, (list_of_seq' _18227 s (NUMERAL 0%N)) = (@nil A)) /\ (forall s : N -> A, forall n : N, (list_of_seq' _18227 s (N.succ n)) = (@List.app A (list_of_seq' _18227 s n) (@cons A (s n) (@nil A))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N))))))))))))))))))).
Proof. exact (eq_refl (@list_of_seq A)). Qed.
Definition _22857 : Prop -> Prop -> Prop -> Prop -> Prop -> Prop -> Prop -> Prop -> Ascii.ascii := fun a0 : Prop => fun a1 : Prop => fun a2 : Prop => fun a3 : Prop => fun a4 : Prop => fun a5 : Prop => fun a6 : Prop => fun a7 : Prop => _mk_char ((fun a0' : Prop => fun a1' : Prop => fun a2' : Prop => fun a3' : Prop => fun a4' : Prop => fun a5' : Prop => fun a6' : Prop => fun a7' : Prop => @CONSTR (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop Prop))))))) (NUMERAL 0%N) (@pair Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop Prop)))))) a0' (@pair Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop Prop))))) a1' (@pair Prop (prod Prop (prod Prop (prod Prop (prod Prop Prop)))) a2' (@pair Prop (prod Prop (prod Prop (prod Prop Prop))) a3' (@pair Prop (prod Prop (prod Prop Prop)) a4' (@pair Prop (prod Prop Prop) a5' (@pair Prop Prop a6' a7'))))))) (fun n : N => @BOTTOM (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop Prop))))))))) a0 a1 a2 a3 a4 a5 a6 a7).
Lemma _22857_def : _22857 = (fun a0 : Prop => fun a1 : Prop => fun a2 : Prop => fun a3 : Prop => fun a4 : Prop => fun a5 : Prop => fun a6 : Prop => fun a7 : Prop => _mk_char ((fun a0' : Prop => fun a1' : Prop => fun a2' : Prop => fun a3' : Prop => fun a4' : Prop => fun a5' : Prop => fun a6' : Prop => fun a7' : Prop => @CONSTR (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop Prop))))))) (NUMERAL 0%N) (@pair Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop Prop)))))) a0' (@pair Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop Prop))))) a1' (@pair Prop (prod Prop (prod Prop (prod Prop (prod Prop Prop)))) a2' (@pair Prop (prod Prop (prod Prop (prod Prop Prop))) a3' (@pair Prop (prod Prop (prod Prop Prop)) a4' (@pair Prop (prod Prop Prop) a5' (@pair Prop Prop a6' a7'))))))) (fun n : N => @BOTTOM (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop (prod Prop Prop))))))))) a0 a1 a2 a3 a4 a5 a6 a7)).
Proof. exact (eq_refl _22857). Qed.
Definition ASCII : Prop -> Prop -> Prop -> Prop -> Prop -> Prop -> Prop -> Prop -> Ascii.ascii := _22857.
Lemma ASCII_def : ASCII = _22857.
Proof. exact (eq_refl ASCII). Qed.
Lemma dist_def : dist = (fun _22947 : prod N N => N.add (N.sub (@fst N N _22947) (@snd N N _22947)) (N.sub (@snd N N _22947) (@fst N N _22947))).
Proof. exact (eq_refl dist). Qed.
Lemma is_nadd_def : is_nadd = (fun _23257 : N -> N => exists B : N, forall m : N, forall n : N, N.le (dist (@pair N N (N.mul m (_23257 n)) (N.mul n (_23257 m)))) (N.mul B (N.add m n))).
Proof. exact (eq_refl is_nadd). Qed.
Lemma nadd_eq_def : nadd_eq = (fun _23276 : nadd => fun _23277 : nadd => exists B : N, forall n : N, N.le (dist (@pair N N (dest_nadd _23276 n) (dest_nadd _23277 n))) B).
Proof. exact (eq_refl nadd_eq). Qed.
Lemma nadd_of_num_def : nadd_of_num = (fun _23288 : N => mk_nadd (fun n : N => N.mul _23288 n)).
Proof. exact (eq_refl nadd_of_num). Qed.
Lemma nadd_le_def : nadd_le = (fun _23295 : nadd => fun _23296 : nadd => exists B : N, forall n : N, N.le (dest_nadd _23295 n) (N.add (dest_nadd _23296 n) B)).
Proof. exact (eq_refl nadd_le). Qed.
Lemma nadd_add_def : nadd_add = (fun _23311 : nadd => fun _23312 : nadd => mk_nadd (fun n : N => N.add (dest_nadd _23311 n) (dest_nadd _23312 n))).
Proof. exact (eq_refl nadd_add). Qed.
Lemma nadd_mul_def : nadd_mul = (fun _23325 : nadd => fun _23326 : nadd => mk_nadd (fun n : N => dest_nadd _23325 (dest_nadd _23326 n))).
Proof. exact (eq_refl nadd_mul). Qed.
Lemma nadd_rinv_def : nadd_rinv = (fun _23462 : nadd => fun n : N => N.div (N.mul n n) (dest_nadd _23462 n)).
Proof. exact (eq_refl nadd_rinv). Qed.
Lemma nadd_inv_def : nadd_inv = (fun _23476 : nadd => @COND nadd (nadd_eq _23476 (nadd_of_num (NUMERAL 0%N))) (nadd_of_num (NUMERAL 0%N)) (mk_nadd (nadd_rinv _23476))).
Proof. exact (eq_refl nadd_inv). Qed.
Lemma hreal_of_num_def : hreal_of_num = (fun m : N => mk_hreal (fun u : nadd => nadd_eq (nadd_of_num m) u)).
Proof. exact (eq_refl hreal_of_num). Qed.
Lemma hreal_add_def : hreal_add = (fun x : hreal => fun y : hreal => mk_hreal (fun u : nadd => exists x' : nadd, exists y' : nadd, (nadd_eq (nadd_add x' y') u) /\ ((dest_hreal x x') /\ (dest_hreal y y')))).
Proof. exact (eq_refl hreal_add). Qed.
Lemma hreal_mul_def : hreal_mul = (fun x : hreal => fun y : hreal => mk_hreal (fun u : nadd => exists x' : nadd, exists y' : nadd, (nadd_eq (nadd_mul x' y') u) /\ ((dest_hreal x x') /\ (dest_hreal y y')))).
Proof. exact (eq_refl hreal_mul). Qed.
Lemma hreal_le_def : hreal_le = (fun x : hreal => fun y : hreal => @ε Prop (fun u : Prop => exists x' : nadd, exists y' : nadd, ((nadd_le x' y') = u) /\ ((dest_hreal x x') /\ (dest_hreal y y')))).
Proof. exact (eq_refl hreal_le). Qed.
Lemma hreal_inv_def : hreal_inv = (fun x : hreal => mk_hreal (fun u : nadd => exists x' : nadd, (nadd_eq (nadd_inv x') u) /\ (dest_hreal x x'))).
Proof. exact (eq_refl hreal_inv). Qed.
Lemma treal_of_num_def : treal_of_num = (fun _23721 : N => @pair hreal hreal (hreal_of_num _23721) (hreal_of_num (NUMERAL 0%N))).
Proof. exact (eq_refl treal_of_num). Qed.
Lemma treal_neg_def : treal_neg = (fun _23726 : prod hreal hreal => @pair hreal hreal (@snd hreal hreal _23726) (@fst hreal hreal _23726)).
Proof. exact (eq_refl treal_neg). Qed.
Lemma treal_add_def : treal_add = (fun _23735 : prod hreal hreal => fun _23736 : prod hreal hreal => @pair hreal hreal (hreal_add (@fst hreal hreal _23735) (@fst hreal hreal _23736)) (hreal_add (@snd hreal hreal _23735) (@snd hreal hreal _23736))).
Proof. exact (eq_refl treal_add). Qed.
Lemma treal_mul_def : treal_mul = (fun _23757 : prod hreal hreal => fun _23758 : prod hreal hreal => @pair hreal hreal (hreal_add (hreal_mul (@fst hreal hreal _23757) (@fst hreal hreal _23758)) (hreal_mul (@snd hreal hreal _23757) (@snd hreal hreal _23758))) (hreal_add (hreal_mul (@fst hreal hreal _23757) (@snd hreal hreal _23758)) (hreal_mul (@snd hreal hreal _23757) (@fst hreal hreal _23758)))).
Proof. exact (eq_refl treal_mul). Qed.
Lemma treal_le_def : treal_le = (fun _23779 : prod hreal hreal => fun _23780 : prod hreal hreal => hreal_le (hreal_add (@fst hreal hreal _23779) (@snd hreal hreal _23780)) (hreal_add (@fst hreal hreal _23780) (@snd hreal hreal _23779))).
Proof. exact (eq_refl treal_le). Qed.
Lemma treal_inv_def : treal_inv = (fun _23801 : prod hreal hreal => @COND (prod hreal hreal) ((@fst hreal hreal _23801) = (@snd hreal hreal _23801)) (@pair hreal hreal (hreal_of_num (NUMERAL 0%N)) (hreal_of_num (NUMERAL 0%N))) (@COND (prod hreal hreal) (hreal_le (@snd hreal hreal _23801) (@fst hreal hreal _23801)) (@pair hreal hreal (hreal_inv (@ε hreal (fun d : hreal => (@fst hreal hreal _23801) = (hreal_add (@snd hreal hreal _23801) d)))) (hreal_of_num (NUMERAL 0%N))) (@pair hreal hreal (hreal_of_num (NUMERAL 0%N)) (hreal_inv (@ε hreal (fun d : hreal => (@snd hreal hreal _23801) = (hreal_add (@fst hreal hreal _23801) d))))))).
Proof. exact (eq_refl treal_inv). Qed.
Lemma treal_eq_def : treal_eq = (fun _23810 : prod hreal hreal => fun _23811 : prod hreal hreal => (hreal_add (@fst hreal hreal _23810) (@snd hreal hreal _23811)) = (hreal_add (@fst hreal hreal _23811) (@snd hreal hreal _23810))).
Proof. exact (eq_refl treal_eq). Qed.
Definition real_pow : R -> N -> R := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> R -> N -> R) (fun real_pow' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> R -> N -> R => forall _24085 : prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))), (forall x : R, (real_pow' _24085 x (NUMERAL 0%N)) = (R_of_N (NUMERAL (BIT1 0%N)))) /\ (forall x : R, forall n : N, (real_pow' _24085 x (N.succ n)) = (Rmult x (real_pow' _24085 x n)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N))))))))))))))).
Lemma real_pow_def : real_pow = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> R -> N -> R) (fun real_pow' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> R -> N -> R => forall _24085 : prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))), (forall x : R, (real_pow' _24085 x (NUMERAL 0%N)) = (R_of_N (NUMERAL (BIT1 0%N)))) /\ (forall x : R, forall n : N, (real_pow' _24085 x (N.succ n)) = (Rmult x (real_pow' _24085 x n)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))))))))))).
Proof. exact (eq_refl real_pow). Qed.
Definition real_sgn : R -> R := fun _26598 : R => @COND R (Rlt (R_of_N (NUMERAL 0%N)) _26598) (R_of_N (NUMERAL (BIT1 0%N))) (@COND R (Rlt _26598 (R_of_N (NUMERAL 0%N))) (Ropp (R_of_N (NUMERAL (BIT1 0%N)))) (R_of_N (NUMERAL 0%N))).
Lemma real_sgn_def : real_sgn = (fun _26598 : R => @COND R (Rlt (R_of_N (NUMERAL 0%N)) _26598) (R_of_N (NUMERAL (BIT1 0%N))) (@COND R (Rlt _26598 (R_of_N (NUMERAL 0%N))) (Ropp (R_of_N (NUMERAL (BIT1 0%N)))) (R_of_N (NUMERAL 0%N)))).
Proof. exact (eq_refl real_sgn). Qed.
Definition sqrt : R -> R := fun _27149 : R => @ε R (fun y : R => ((real_sgn y) = (real_sgn _27149)) /\ ((real_pow y (NUMERAL (BIT0 (BIT1 0%N)))) = (Rabs _27149))).
Lemma sqrt_def : sqrt = (fun _27149 : R => @ε R (fun y : R => ((real_sgn y) = (real_sgn _27149)) /\ ((real_pow y (NUMERAL (BIT0 (BIT1 0%N)))) = (Rabs _27149)))).
Proof. exact (eq_refl sqrt). Qed.
Definition DECIMAL : N -> N -> R := fun _27828 : N => fun _27829 : N => Rdiv (R_of_N _27828) (R_of_N _27829).
Lemma DECIMAL_def : DECIMAL = (fun _27828 : N => fun _27829 : N => Rdiv (R_of_N _27828) (R_of_N _27829)).
Proof. exact (eq_refl DECIMAL). Qed.
Definition integer : R -> Prop := fun _28715 : R => exists n : N, (Rabs _28715) = (R_of_N n).
Lemma integer_def : integer = (fun _28715 : R => exists n : N, (Rabs _28715) = (R_of_N n)).
Proof. exact (eq_refl integer). Qed.
Definition int_le : Z -> Z -> Prop := fun _28741 : Z => fun _28742 : Z => Rle (IZR _28741) (IZR _28742).
Lemma int_le_def : int_le = (fun _28741 : Z => fun _28742 : Z => Rle (IZR _28741) (IZR _28742)).
Proof. exact (eq_refl int_le). Qed.
Definition int_lt : Z -> Z -> Prop := fun _28753 : Z => fun _28754 : Z => Rlt (IZR _28753) (IZR _28754).
Lemma int_lt_def : int_lt = (fun _28753 : Z => fun _28754 : Z => Rlt (IZR _28753) (IZR _28754)).
Proof. exact (eq_refl int_lt). Qed.
Definition int_ge : Z -> Z -> Prop := fun _28765 : Z => fun _28766 : Z => Rge (IZR _28765) (IZR _28766).
Lemma int_ge_def : int_ge = (fun _28765 : Z => fun _28766 : Z => Rge (IZR _28765) (IZR _28766)).
Proof. exact (eq_refl int_ge). Qed.
Definition int_gt : Z -> Z -> Prop := fun _28777 : Z => fun _28778 : Z => Rgt (IZR _28777) (IZR _28778).
Lemma int_gt_def : int_gt = (fun _28777 : Z => fun _28778 : Z => Rgt (IZR _28777) (IZR _28778)).
Proof. exact (eq_refl int_gt). Qed.
Definition int_neg : Z -> Z := fun _28794 : Z => int_of_real (Ropp (IZR _28794)).
Lemma int_neg_def : int_neg = (fun _28794 : Z => int_of_real (Ropp (IZR _28794))).
Proof. exact (eq_refl int_neg). Qed.
Definition int_add : Z -> Z -> Z := fun _28803 : Z => fun _28804 : Z => int_of_real (Rplus (IZR _28803) (IZR _28804)).
Lemma int_add_def : int_add = (fun _28803 : Z => fun _28804 : Z => int_of_real (Rplus (IZR _28803) (IZR _28804))).
Proof. exact (eq_refl int_add). Qed.
Definition int_sub : Z -> Z -> Z := fun _28835 : Z => fun _28836 : Z => int_of_real (Rminus (IZR _28835) (IZR _28836)).
Lemma int_sub_def : int_sub = (fun _28835 : Z => fun _28836 : Z => int_of_real (Rminus (IZR _28835) (IZR _28836))).
Proof. exact (eq_refl int_sub). Qed.
Definition int_mul : Z -> Z -> Z := fun _28847 : Z => fun _28848 : Z => int_of_real (Rmult (IZR _28847) (IZR _28848)).
Lemma int_mul_def : int_mul = (fun _28847 : Z => fun _28848 : Z => int_of_real (Rmult (IZR _28847) (IZR _28848))).
Proof. exact (eq_refl int_mul). Qed.
Definition int_abs : Z -> Z := fun _28867 : Z => int_of_real (Rabs (IZR _28867)).
Lemma int_abs_def : int_abs = (fun _28867 : Z => int_of_real (Rabs (IZR _28867))).
Proof. exact (eq_refl int_abs). Qed.
Definition int_sgn : Z -> Z := fun _28878 : Z => int_of_real (real_sgn (IZR _28878)).
Lemma int_sgn_def : int_sgn = (fun _28878 : Z => int_of_real (real_sgn (IZR _28878))).
Proof. exact (eq_refl int_sgn). Qed.
Definition int_max : Z -> Z -> Z := fun _28938 : Z => fun _28939 : Z => int_of_real (Rmax (IZR _28938) (IZR _28939)).
Lemma int_max_def : int_max = (fun _28938 : Z => fun _28939 : Z => int_of_real (Rmax (IZR _28938) (IZR _28939))).
Proof. exact (eq_refl int_max). Qed.
Definition int_min : Z -> Z -> Z := fun _28956 : Z => fun _28957 : Z => int_of_real (Rmin (IZR _28956) (IZR _28957)).
Lemma int_min_def : int_min = (fun _28956 : Z => fun _28957 : Z => int_of_real (Rmin (IZR _28956) (IZR _28957))).
Proof. exact (eq_refl int_min). Qed.
Definition int_pow : Z -> N -> Z := fun _28974 : Z => fun _28975 : N => int_of_real (real_pow (IZR _28974) _28975).
Lemma int_pow_def : int_pow = (fun _28974 : Z => fun _28975 : N => int_of_real (real_pow (IZR _28974) _28975)).
Proof. exact (eq_refl int_pow). Qed.
Definition div : Z -> Z -> Z := @ε ((prod N (prod N N)) -> Z -> Z -> Z) (fun q : (prod N (prod N N)) -> Z -> Z -> Z => forall _29326 : prod N (prod N N), exists r : Z -> Z -> Z, forall m : Z, forall n : Z, @COND Prop (n = (Z_of_N (NUMERAL 0%N))) (((q _29326 m n) = (Z_of_N (NUMERAL 0%N))) /\ ((r m n) = m)) ((int_le (Z_of_N (NUMERAL 0%N)) (r m n)) /\ ((int_lt (r m n) (int_abs n)) /\ (m = (int_add (int_mul (q _29326 m n) n) (r m n)))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))))).
Lemma div_def : div = (@ε ((prod N (prod N N)) -> Z -> Z -> Z) (fun q : (prod N (prod N N)) -> Z -> Z -> Z => forall _29326 : prod N (prod N N), exists r : Z -> Z -> Z, forall m : Z, forall n : Z, @COND Prop (n = (Z_of_N (NUMERAL 0%N))) (((q _29326 m n) = (Z_of_N (NUMERAL 0%N))) /\ ((r m n) = m)) ((int_le (Z_of_N (NUMERAL 0%N)) (r m n)) /\ ((int_lt (r m n) (int_abs n)) /\ (m = (int_add (int_mul (q _29326 m n) n) (r m n)))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N))))))))))).
Proof. exact (eq_refl div). Qed.
Definition rem : Z -> Z -> Z := @ε ((prod N (prod N N)) -> Z -> Z -> Z) (fun r : (prod N (prod N N)) -> Z -> Z -> Z => forall _29327 : prod N (prod N N), forall m : Z, forall n : Z, @COND Prop (n = (Z_of_N (NUMERAL 0%N))) (((div m n) = (Z_of_N (NUMERAL 0%N))) /\ ((r _29327 m n) = m)) ((int_le (Z_of_N (NUMERAL 0%N)) (r _29327 m n)) /\ ((int_lt (r _29327 m n) (int_abs n)) /\ (m = (int_add (int_mul (div m n) n) (r _29327 m n)))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))))).
Lemma rem_def : rem = (@ε ((prod N (prod N N)) -> Z -> Z -> Z) (fun r : (prod N (prod N N)) -> Z -> Z -> Z => forall _29327 : prod N (prod N N), forall m : Z, forall n : Z, @COND Prop (n = (Z_of_N (NUMERAL 0%N))) (((div m n) = (Z_of_N (NUMERAL 0%N))) /\ ((r _29327 m n) = m)) ((int_le (Z_of_N (NUMERAL 0%N)) (r _29327 m n)) /\ ((int_lt (r _29327 m n) (int_abs n)) /\ (m = (int_add (int_mul (div m n) n) (r _29327 m n)))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N))))))))))).
Proof. exact (eq_refl rem). Qed.
Definition eq2 {A : Type'} : A -> A -> (A -> A -> Prop) -> Prop := fun _29602 : A => fun _29603 : A => fun _29604 : A -> A -> Prop => _29604 _29602 _29603.
Lemma eq2_def {A : Type'} : (@eq2 A) = (fun _29602 : A => fun _29603 : A => fun _29604 : A -> A -> Prop => _29604 _29602 _29603).
Proof. exact (eq_refl (@eq2 A)). Qed.
Definition real_mod : R -> R -> R -> Prop := fun _29623 : R => fun _29624 : R => fun _29625 : R => exists q : R, (integer q) /\ ((Rminus _29624 _29625) = (Rmult q _29623)).
Lemma real_mod_def : real_mod = (fun _29623 : R => fun _29624 : R => fun _29625 : R => exists q : R, (integer q) /\ ((Rminus _29624 _29625) = (Rmult q _29623))).
Proof. exact (eq_refl real_mod). Qed.
Definition int_divides : Z -> Z -> Prop := fun _29644 : Z => fun _29645 : Z => exists x : Z, _29645 = (int_mul _29644 x).
Lemma int_divides_def : int_divides = (fun _29644 : Z => fun _29645 : Z => exists x : Z, _29645 = (int_mul _29644 x)).
Proof. exact (eq_refl int_divides). Qed.
Definition int_mod : Z -> Z -> Z -> Prop := fun _29664 : Z => fun _29665 : Z => fun _29666 : Z => int_divides _29664 (int_sub _29665 _29666).
Lemma int_mod_def : int_mod = (fun _29664 : Z => fun _29665 : Z => fun _29666 : Z => int_divides _29664 (int_sub _29665 _29666)).
Proof. exact (eq_refl int_mod). Qed.
Definition int_coprime : (prod Z Z) -> Prop := fun _29691 : prod Z Z => exists x : Z, exists y : Z, (int_add (int_mul (@fst Z Z _29691) x) (int_mul (@snd Z Z _29691) y)) = (Z_of_N (NUMERAL (BIT1 0%N))).
Lemma int_coprime_def : int_coprime = (fun _29691 : prod Z Z => exists x : Z, exists y : Z, (int_add (int_mul (@fst Z Z _29691) x) (int_mul (@snd Z Z _29691) y)) = (Z_of_N (NUMERAL (BIT1 0%N)))).
Proof. exact (eq_refl int_coprime). Qed.
Definition int_gcd : (prod Z Z) -> Z := @ε ((prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (prod Z Z) -> Z) (fun d : (prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (prod Z Z) -> Z => forall _30960 : prod N (prod N (prod N (prod N (prod N (prod N N))))), forall a : Z, forall b : Z, (int_le (Z_of_N (NUMERAL 0%N)) (d _30960 (@pair Z Z a b))) /\ ((int_divides (d _30960 (@pair Z Z a b)) a) /\ ((int_divides (d _30960 (@pair Z Z a b)) b) /\ (exists x : Z, exists y : Z, (d _30960 (@pair Z Z a b)) = (int_add (int_mul a x) (int_mul b y)))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))))))))).
Lemma int_gcd_def : int_gcd = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (prod Z Z) -> Z) (fun d : (prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (prod Z Z) -> Z => forall _30960 : prod N (prod N (prod N (prod N (prod N (prod N N))))), forall a : Z, forall b : Z, (int_le (Z_of_N (NUMERAL 0%N)) (d _30960 (@pair Z Z a b))) /\ ((int_divides (d _30960 (@pair Z Z a b)) a) /\ ((int_divides (d _30960 (@pair Z Z a b)) b) /\ (exists x : Z, exists y : Z, (d _30960 (@pair Z Z a b)) = (int_add (int_mul a x) (int_mul b y)))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N))))))))))))))).
Proof. exact (eq_refl int_gcd). Qed.
Definition int_lcm : (prod Z Z) -> Z := fun _30961 : prod Z Z => @COND Z ((int_mul (@fst Z Z _30961) (@snd Z Z _30961)) = (Z_of_N (NUMERAL 0%N))) (Z_of_N (NUMERAL 0%N)) (div (int_abs (int_mul (@fst Z Z _30961) (@snd Z Z _30961))) (int_gcd (@pair Z Z (@fst Z Z _30961) (@snd Z Z _30961)))).
Lemma int_lcm_def : int_lcm = (fun _30961 : prod Z Z => @COND Z ((int_mul (@fst Z Z _30961) (@snd Z Z _30961)) = (Z_of_N (NUMERAL 0%N))) (Z_of_N (NUMERAL 0%N)) (div (int_abs (int_mul (@fst Z Z _30961) (@snd Z Z _30961))) (int_gcd (@pair Z Z (@fst Z Z _30961) (@snd Z Z _30961))))).
Proof. exact (eq_refl int_lcm). Qed.
Definition num_of_int : Z -> N := fun _31234 : Z => @ε N (fun n : N => (Z_of_N n) = _31234).
Lemma num_of_int_def : num_of_int = (fun _31234 : Z => @ε N (fun n : N => (Z_of_N n) = _31234)).
Proof. exact (eq_refl num_of_int). Qed.
Definition num_divides : N -> N -> Prop := fun _31266 : N => fun _31267 : N => int_divides (Z_of_N _31266) (Z_of_N _31267).
Lemma num_divides_def : num_divides = (fun _31266 : N => fun _31267 : N => int_divides (Z_of_N _31266) (Z_of_N _31267)).
Proof. exact (eq_refl num_divides). Qed.
Definition num_mod : N -> N -> N -> Prop := fun _31278 : N => fun _31279 : N => fun _31280 : N => int_mod (Z_of_N _31278) (Z_of_N _31279) (Z_of_N _31280).
Lemma num_mod_def : num_mod = (fun _31278 : N => fun _31279 : N => fun _31280 : N => int_mod (Z_of_N _31278) (Z_of_N _31279) (Z_of_N _31280)).
Proof. exact (eq_refl num_mod). Qed.
Definition num_coprime : (prod N N) -> Prop := fun _31299 : prod N N => int_coprime (@pair Z Z (Z_of_N (@fst N N _31299)) (Z_of_N (@snd N N _31299))).
Lemma num_coprime_def : num_coprime = (fun _31299 : prod N N => int_coprime (@pair Z Z (Z_of_N (@fst N N _31299)) (Z_of_N (@snd N N _31299)))).
Proof. exact (eq_refl num_coprime). Qed.
Definition num_gcd : (prod N N) -> N := fun _31308 : prod N N => num_of_int (int_gcd (@pair Z Z (Z_of_N (@fst N N _31308)) (Z_of_N (@snd N N _31308)))).
Lemma num_gcd_def : num_gcd = (fun _31308 : prod N N => num_of_int (int_gcd (@pair Z Z (Z_of_N (@fst N N _31308)) (Z_of_N (@snd N N _31308))))).
Proof. exact (eq_refl num_gcd). Qed.
Definition num_lcm : (prod N N) -> N := fun _31317 : prod N N => num_of_int (int_lcm (@pair Z Z (Z_of_N (@fst N N _31317)) (Z_of_N (@snd N N _31317)))).
Lemma num_lcm_def : num_lcm = (fun _31317 : prod N N => num_of_int (int_lcm (@pair Z Z (Z_of_N (@fst N N _31317)) (Z_of_N (@snd N N _31317))))).
Proof. exact (eq_refl num_lcm). Qed.
Definition prime : N -> Prop := fun _32102 : N => (~ (_32102 = (NUMERAL (BIT1 0%N)))) /\ (forall x : N, (num_divides x _32102) -> (x = (NUMERAL (BIT1 0%N))) \/ (x = _32102)).
Lemma prime_def : prime = (fun _32102 : N => (~ (_32102 = (NUMERAL (BIT1 0%N)))) /\ (forall x : N, (num_divides x _32102) -> (x = (NUMERAL (BIT1 0%N))) \/ (x = _32102))).
Proof. exact (eq_refl prime). Qed.
Definition real_zpow : R -> Z -> R := fun _32260 : R => fun _32261 : Z => @COND R (int_le (Z_of_N (NUMERAL 0%N)) _32261) (real_pow _32260 (num_of_int _32261)) (Rinv (real_pow _32260 (num_of_int (int_neg _32261)))).
Lemma real_zpow_def : real_zpow = (fun _32260 : R => fun _32261 : Z => @COND R (int_le (Z_of_N (NUMERAL 0%N)) _32261) (real_pow _32260 (num_of_int _32261)) (Rinv (real_pow _32260 (num_of_int (int_neg _32261))))).
Proof. exact (eq_refl real_zpow). Qed.
Definition IN {A : Type'} : A -> (A -> Prop) -> Prop := fun _32317 : A => fun _32318 : A -> Prop => _32318 _32317.
Lemma IN_def {A : Type'} : (@IN A) = (fun _32317 : A => fun _32318 : A -> Prop => _32318 _32317).
Proof. exact (eq_refl (@IN A)). Qed.
Definition GSPEC {A : Type'} : (A -> Prop) -> A -> Prop := fun _32329 : A -> Prop => _32329.
Lemma GSPEC_def {A : Type'} : (@GSPEC A) = (fun _32329 : A -> Prop => _32329).
Proof. exact (eq_refl (@GSPEC A)). Qed.
Definition SETSPEC {A : Type'} : A -> Prop -> A -> Prop := fun _32334 : A => fun _32335 : Prop => fun _32336 : A => _32335 /\ (_32334 = _32336).
Lemma SETSPEC_def {A : Type'} : (@SETSPEC A) = (fun _32334 : A => fun _32335 : Prop => fun _32336 : A => _32335 /\ (_32334 = _32336)).
Proof. exact (eq_refl (@SETSPEC A)). Qed.
Definition EMPTY {A : Type'} : A -> Prop := fun x : A => False.
Lemma EMPTY_def {A : Type'} : (@EMPTY A) = (fun x : A => False).
Proof. exact (eq_refl (@EMPTY A)). Qed.
Definition INSERT {A : Type'} : A -> (A -> Prop) -> A -> Prop := fun _32373 : A => fun _32374 : A -> Prop => fun y : A => (@IN A y _32374) \/ (y = _32373).
Lemma INSERT_def {A : Type'} : (@INSERT A) = (fun _32373 : A => fun _32374 : A -> Prop => fun y : A => (@IN A y _32374) \/ (y = _32373)).
Proof. exact (eq_refl (@INSERT A)). Qed.
Definition UNIV {A : Type'} : A -> Prop := fun x : A => True.
Lemma UNIV_def {A : Type'} : (@UNIV A) = (fun x : A => True).
Proof. exact (eq_refl (@UNIV A)). Qed.
Definition UNION {A : Type'} : (A -> Prop) -> (A -> Prop) -> A -> Prop := fun _32385 : A -> Prop => fun _32386 : A -> Prop => @GSPEC A (fun GEN_PVAR_0 : A => exists x : A, @SETSPEC A GEN_PVAR_0 ((@IN A x _32385) \/ (@IN A x _32386)) x).
Lemma UNION_def {A : Type'} : (@UNION A) = (fun _32385 : A -> Prop => fun _32386 : A -> Prop => @GSPEC A (fun GEN_PVAR_0 : A => exists x : A, @SETSPEC A GEN_PVAR_0 ((@IN A x _32385) \/ (@IN A x _32386)) x)).
Proof. exact (eq_refl (@UNION A)). Qed.
Definition UNIONS {A : Type'} : ((A -> Prop) -> Prop) -> A -> Prop := fun _32397 : (A -> Prop) -> Prop => @GSPEC A (fun GEN_PVAR_1 : A => exists x : A, @SETSPEC A GEN_PVAR_1 (exists u : A -> Prop, (@IN (A -> Prop) u _32397) /\ (@IN A x u)) x).
Lemma UNIONS_def {A : Type'} : (@UNIONS A) = (fun _32397 : (A -> Prop) -> Prop => @GSPEC A (fun GEN_PVAR_1 : A => exists x : A, @SETSPEC A GEN_PVAR_1 (exists u : A -> Prop, (@IN (A -> Prop) u _32397) /\ (@IN A x u)) x)).
Proof. exact (eq_refl (@UNIONS A)). Qed.
Definition INTER {A : Type'} : (A -> Prop) -> (A -> Prop) -> A -> Prop := fun _32402 : A -> Prop => fun _32403 : A -> Prop => @GSPEC A (fun GEN_PVAR_2 : A => exists x : A, @SETSPEC A GEN_PVAR_2 ((@IN A x _32402) /\ (@IN A x _32403)) x).
Lemma INTER_def {A : Type'} : (@INTER A) = (fun _32402 : A -> Prop => fun _32403 : A -> Prop => @GSPEC A (fun GEN_PVAR_2 : A => exists x : A, @SETSPEC A GEN_PVAR_2 ((@IN A x _32402) /\ (@IN A x _32403)) x)).
Proof. exact (eq_refl (@INTER A)). Qed.
Definition INTERS {A : Type'} : ((A -> Prop) -> Prop) -> A -> Prop := fun _32414 : (A -> Prop) -> Prop => @GSPEC A (fun GEN_PVAR_3 : A => exists x : A, @SETSPEC A GEN_PVAR_3 (forall u : A -> Prop, (@IN (A -> Prop) u _32414) -> @IN A x u) x).
Lemma INTERS_def {A : Type'} : (@INTERS A) = (fun _32414 : (A -> Prop) -> Prop => @GSPEC A (fun GEN_PVAR_3 : A => exists x : A, @SETSPEC A GEN_PVAR_3 (forall u : A -> Prop, (@IN (A -> Prop) u _32414) -> @IN A x u) x)).
Proof. exact (eq_refl (@INTERS A)). Qed.
Definition DIFF {A : Type'} : (A -> Prop) -> (A -> Prop) -> A -> Prop := fun _32419 : A -> Prop => fun _32420 : A -> Prop => @GSPEC A (fun GEN_PVAR_4 : A => exists x : A, @SETSPEC A GEN_PVAR_4 ((@IN A x _32419) /\ (~ (@IN A x _32420))) x).
Lemma DIFF_def {A : Type'} : (@DIFF A) = (fun _32419 : A -> Prop => fun _32420 : A -> Prop => @GSPEC A (fun GEN_PVAR_4 : A => exists x : A, @SETSPEC A GEN_PVAR_4 ((@IN A x _32419) /\ (~ (@IN A x _32420))) x)).
Proof. exact (eq_refl (@DIFF A)). Qed.
Definition DELETE {A : Type'} : (A -> Prop) -> A -> A -> Prop := fun _32431 : A -> Prop => fun _32432 : A => @GSPEC A (fun GEN_PVAR_6 : A => exists y : A, @SETSPEC A GEN_PVAR_6 ((@IN A y _32431) /\ (~ (y = _32432))) y).
Lemma DELETE_def {A : Type'} : (@DELETE A) = (fun _32431 : A -> Prop => fun _32432 : A => @GSPEC A (fun GEN_PVAR_6 : A => exists y : A, @SETSPEC A GEN_PVAR_6 ((@IN A y _32431) /\ (~ (y = _32432))) y)).
Proof. exact (eq_refl (@DELETE A)). Qed.
Definition SUBSET {A : Type'} : (A -> Prop) -> (A -> Prop) -> Prop := fun _32443 : A -> Prop => fun _32444 : A -> Prop => forall x : A, (@IN A x _32443) -> @IN A x _32444.
Lemma SUBSET_def {A : Type'} : (@SUBSET A) = (fun _32443 : A -> Prop => fun _32444 : A -> Prop => forall x : A, (@IN A x _32443) -> @IN A x _32444).
Proof. exact (eq_refl (@SUBSET A)). Qed.
Definition PSUBSET {A : Type'} : (A -> Prop) -> (A -> Prop) -> Prop := fun _32455 : A -> Prop => fun _32456 : A -> Prop => (@SUBSET A _32455 _32456) /\ (~ (_32455 = _32456)).
Lemma PSUBSET_def {A : Type'} : (@PSUBSET A) = (fun _32455 : A -> Prop => fun _32456 : A -> Prop => (@SUBSET A _32455 _32456) /\ (~ (_32455 = _32456))).
Proof. exact (eq_refl (@PSUBSET A)). Qed.
Definition DISJOINT {A : Type'} : (A -> Prop) -> (A -> Prop) -> Prop := fun _32467 : A -> Prop => fun _32468 : A -> Prop => (@INTER A _32467 _32468) = (@EMPTY A).
Lemma DISJOINT_def {A : Type'} : (@DISJOINT A) = (fun _32467 : A -> Prop => fun _32468 : A -> Prop => (@INTER A _32467 _32468) = (@EMPTY A)).
Proof. exact (eq_refl (@DISJOINT A)). Qed.
Definition SING {A : Type'} : (A -> Prop) -> Prop := fun _32479 : A -> Prop => exists x : A, _32479 = (@INSERT A x (@EMPTY A)).
Lemma SING_def {A : Type'} : (@SING A) = (fun _32479 : A -> Prop => exists x : A, _32479 = (@INSERT A x (@EMPTY A))).
Proof. exact (eq_refl (@SING A)). Qed.
Definition FINITE {A : Type'} : (A -> Prop) -> Prop := fun a : A -> Prop => forall FINITE' : (A -> Prop) -> Prop, (forall a' : A -> Prop, ((a' = (@EMPTY A)) \/ (exists x : A, exists s : A -> Prop, (a' = (@INSERT A x s)) /\ (FINITE' s))) -> FINITE' a') -> FINITE' a.
Lemma FINITE_def {A : Type'} : (@FINITE A) = (fun a : A -> Prop => forall FINITE' : (A -> Prop) -> Prop, (forall a' : A -> Prop, ((a' = (@EMPTY A)) \/ (exists x : A, exists s : A -> Prop, (a' = (@INSERT A x s)) /\ (FINITE' s))) -> FINITE' a') -> FINITE' a).
Proof. exact (eq_refl (@FINITE A)). Qed.
Definition INFINITE {A : Type'} : (A -> Prop) -> Prop := fun _32488 : A -> Prop => ~ (@FINITE A _32488).
Lemma INFINITE_def {A : Type'} : (@INFINITE A) = (fun _32488 : A -> Prop => ~ (@FINITE A _32488)).
Proof. exact (eq_refl (@INFINITE A)). Qed.
Definition IMAGE {A B : Type'} : (A -> B) -> (A -> Prop) -> B -> Prop := fun _32493 : A -> B => fun _32494 : A -> Prop => @GSPEC B (fun GEN_PVAR_7 : B => exists y : B, @SETSPEC B GEN_PVAR_7 (exists x : A, (@IN A x _32494) /\ (y = (_32493 x))) y).
Lemma IMAGE_def {A B : Type'} : (@IMAGE A B) = (fun _32493 : A -> B => fun _32494 : A -> Prop => @GSPEC B (fun GEN_PVAR_7 : B => exists y : B, @SETSPEC B GEN_PVAR_7 (exists x : A, (@IN A x _32494) /\ (y = (_32493 x))) y)).
Proof. exact (eq_refl (@IMAGE A B)). Qed.
Definition INJ {A B : Type'} : (A -> B) -> (A -> Prop) -> (B -> Prop) -> Prop := fun _32505 : A -> B => fun _32506 : A -> Prop => fun _32507 : B -> Prop => (forall x : A, (@IN A x _32506) -> @IN B (_32505 x) _32507) /\ (forall x : A, forall y : A, ((@IN A x _32506) /\ ((@IN A y _32506) /\ ((_32505 x) = (_32505 y)))) -> x = y).
Lemma INJ_def {A B : Type'} : (@INJ A B) = (fun _32505 : A -> B => fun _32506 : A -> Prop => fun _32507 : B -> Prop => (forall x : A, (@IN A x _32506) -> @IN B (_32505 x) _32507) /\ (forall x : A, forall y : A, ((@IN A x _32506) /\ ((@IN A y _32506) /\ ((_32505 x) = (_32505 y)))) -> x = y)).
Proof. exact (eq_refl (@INJ A B)). Qed.
Definition SURJ {A B : Type'} : (A -> B) -> (A -> Prop) -> (B -> Prop) -> Prop := fun _32526 : A -> B => fun _32527 : A -> Prop => fun _32528 : B -> Prop => (forall x : A, (@IN A x _32527) -> @IN B (_32526 x) _32528) /\ (forall x : B, (@IN B x _32528) -> exists y : A, (@IN A y _32527) /\ ((_32526 y) = x)).
Lemma SURJ_def {A B : Type'} : (@SURJ A B) = (fun _32526 : A -> B => fun _32527 : A -> Prop => fun _32528 : B -> Prop => (forall x : A, (@IN A x _32527) -> @IN B (_32526 x) _32528) /\ (forall x : B, (@IN B x _32528) -> exists y : A, (@IN A y _32527) /\ ((_32526 y) = x))).
Proof. exact (eq_refl (@SURJ A B)). Qed.
Definition BIJ {A B : Type'} : (A -> B) -> (A -> Prop) -> (B -> Prop) -> Prop := fun _32547 : A -> B => fun _32548 : A -> Prop => fun _32549 : B -> Prop => (@INJ A B _32547 _32548 _32549) /\ (@SURJ A B _32547 _32548 _32549).
Lemma BIJ_def {A B : Type'} : (@BIJ A B) = (fun _32547 : A -> B => fun _32548 : A -> Prop => fun _32549 : B -> Prop => (@INJ A B _32547 _32548 _32549) /\ (@SURJ A B _32547 _32548 _32549)).
Proof. exact (eq_refl (@BIJ A B)). Qed.
Definition CHOICE {A : Type'} : (A -> Prop) -> A := fun _32568 : A -> Prop => @ε A (fun x : A => @IN A x _32568).
Lemma CHOICE_def {A : Type'} : (@CHOICE A) = (fun _32568 : A -> Prop => @ε A (fun x : A => @IN A x _32568)).
Proof. exact (eq_refl (@CHOICE A)). Qed.
Definition REST {A : Type'} : (A -> Prop) -> A -> Prop := fun _32573 : A -> Prop => @DELETE A _32573 (@CHOICE A _32573).
Lemma REST_def {A : Type'} : (@REST A) = (fun _32573 : A -> Prop => @DELETE A _32573 (@CHOICE A _32573)).
Proof. exact (eq_refl (@REST A)). Qed.
Definition FINREC {A B : Type'} : (A -> B -> B) -> B -> (A -> Prop) -> B -> N -> Prop := @ε ((prod N (prod N (prod N (prod N (prod N N))))) -> (A -> B -> B) -> B -> (A -> Prop) -> B -> N -> Prop) (fun FINREC' : (prod N (prod N (prod N (prod N (prod N N))))) -> (A -> B -> B) -> B -> (A -> Prop) -> B -> N -> Prop => forall _42175 : prod N (prod N (prod N (prod N (prod N N)))), (forall f : A -> B -> B, forall s : A -> Prop, forall a : B, forall b : B, (FINREC' _42175 f b s a (NUMERAL 0%N)) = ((s = (@EMPTY A)) /\ (a = b))) /\ (forall b : B, forall s : A -> Prop, forall n : N, forall a : B, forall f : A -> B -> B, (FINREC' _42175 f b s a (N.succ n)) = (exists x : A, exists c : B, (@IN A x s) /\ ((FINREC' _42175 f b (@DELETE A s x) c n) /\ (a = (f x c)))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N))))))))))))).
Lemma FINREC_def {A B : Type'} : (@FINREC A B) = (@ε ((prod N (prod N (prod N (prod N (prod N N))))) -> (A -> B -> B) -> B -> (A -> Prop) -> B -> N -> Prop) (fun FINREC' : (prod N (prod N (prod N (prod N (prod N N))))) -> (A -> B -> B) -> B -> (A -> Prop) -> B -> N -> Prop => forall _42175 : prod N (prod N (prod N (prod N (prod N N)))), (forall f : A -> B -> B, forall s : A -> Prop, forall a : B, forall b : B, (FINREC' _42175 f b s a (NUMERAL 0%N)) = ((s = (@EMPTY A)) /\ (a = b))) /\ (forall b : B, forall s : A -> Prop, forall n : N, forall a : B, forall f : A -> B -> B, (FINREC' _42175 f b s a (N.succ n)) = (exists x : A, exists c : B, (@IN A x s) /\ ((FINREC' _42175 f b (@DELETE A s x) c n) /\ (a = (f x c)))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))))))))).
Proof. exact (eq_refl (@FINREC A B)). Qed.
Definition ITSET {A B : Type'} : (A -> B -> B) -> (A -> Prop) -> B -> B := fun _43025 : A -> B -> B => fun _43026 : A -> Prop => fun _43027 : B => @ε ((A -> Prop) -> B) (fun g : (A -> Prop) -> B => ((g (@EMPTY A)) = _43027) /\ (forall x : A, forall s : A -> Prop, (@FINITE A s) -> (g (@INSERT A x s)) = (@COND B (@IN A x s) (g s) (_43025 x (g s))))) _43026.
Lemma ITSET_def {A B : Type'} : (@ITSET A B) = (fun _43025 : A -> B -> B => fun _43026 : A -> Prop => fun _43027 : B => @ε ((A -> Prop) -> B) (fun g : (A -> Prop) -> B => ((g (@EMPTY A)) = _43027) /\ (forall x : A, forall s : A -> Prop, (@FINITE A s) -> (g (@INSERT A x s)) = (@COND B (@IN A x s) (g s) (_43025 x (g s))))) _43026).
Proof. exact (eq_refl (@ITSET A B)). Qed.
Definition CARD {A : Type'} : (A -> Prop) -> N := fun _43228 : A -> Prop => @ITSET A N (fun x : A => fun n : N => N.succ n) _43228 (NUMERAL 0%N).
Lemma CARD_def {A : Type'} : (@CARD A) = (fun _43228 : A -> Prop => @ITSET A N (fun x : A => fun n : N => N.succ n) _43228 (NUMERAL 0%N)).
Proof. exact (eq_refl (@CARD A)). Qed.
Definition HAS_SIZE {A : Type'} : (A -> Prop) -> N -> Prop := fun _43403 : A -> Prop => fun _43404 : N => (@FINITE A _43403) /\ ((@CARD A _43403) = _43404).
Lemma HAS_SIZE_def {A : Type'} : (@HAS_SIZE A) = (fun _43403 : A -> Prop => fun _43404 : N => (@FINITE A _43403) /\ ((@CARD A _43403) = _43404)).
Proof. exact (eq_refl (@HAS_SIZE A)). Qed.
Definition CROSS {A B : Type'} : (A -> Prop) -> (B -> Prop) -> (prod A B) -> Prop := fun _47322 : A -> Prop => fun _47323 : B -> Prop => @GSPEC (prod A B) (fun GEN_PVAR_132 : prod A B => exists x : A, exists y : B, @SETSPEC (prod A B) GEN_PVAR_132 ((@IN A x _47322) /\ (@IN B y _47323)) (@pair A B x y)).
Lemma CROSS_def {A B : Type'} : (@CROSS A B) = (fun _47322 : A -> Prop => fun _47323 : B -> Prop => @GSPEC (prod A B) (fun GEN_PVAR_132 : prod A B => exists x : A, exists y : B, @SETSPEC (prod A B) GEN_PVAR_132 ((@IN A x _47322) /\ (@IN B y _47323)) (@pair A B x y))).
Proof. exact (eq_refl (@CROSS A B)). Qed.
Definition ARB {A : Type'} : A := @ε A (fun x : A => False).
Lemma ARB_def {A : Type'} : (@ARB A) = (@ε A (fun x : A => False)).
Proof. exact (eq_refl (@ARB A)). Qed.
Definition EXTENSIONAL {A B : Type'} : (A -> Prop) -> (A -> B) -> Prop := fun _48096 : A -> Prop => @GSPEC (A -> B) (fun GEN_PVAR_141 : A -> B => exists f : A -> B, @SETSPEC (A -> B) GEN_PVAR_141 (forall x : A, (~ (@IN A x _48096)) -> (f x) = (@ARB B)) f).
Lemma EXTENSIONAL_def {A B : Type'} : (@EXTENSIONAL A B) = (fun _48096 : A -> Prop => @GSPEC (A -> B) (fun GEN_PVAR_141 : A -> B => exists f : A -> B, @SETSPEC (A -> B) GEN_PVAR_141 (forall x : A, (~ (@IN A x _48096)) -> (f x) = (@ARB B)) f)).
Proof. exact (eq_refl (@EXTENSIONAL A B)). Qed.
Definition RESTRICTION {A B : Type'} : (A -> Prop) -> (A -> B) -> A -> B := fun _48148 : A -> Prop => fun _48149 : A -> B => fun _48150 : A => @COND B (@IN A _48150 _48148) (_48149 _48150) (@ARB B).
Lemma RESTRICTION_def {A B : Type'} : (@RESTRICTION A B) = (fun _48148 : A -> Prop => fun _48149 : A -> B => fun _48150 : A => @COND B (@IN A _48150 _48148) (_48149 _48150) (@ARB B)).
Proof. exact (eq_refl (@RESTRICTION A B)). Qed.
Definition cartesian_product {A K : Type'} : (K -> Prop) -> (K -> A -> Prop) -> (K -> A) -> Prop := fun _48343 : K -> Prop => fun _48344 : K -> A -> Prop => @GSPEC (K -> A) (fun GEN_PVAR_142 : K -> A => exists f : K -> A, @SETSPEC (K -> A) GEN_PVAR_142 ((@EXTENSIONAL K A _48343 f) /\ (forall i : K, (@IN K i _48343) -> @IN A (f i) (_48344 i))) f).
Lemma cartesian_product_def {A K : Type'} : (@cartesian_product A K) = (fun _48343 : K -> Prop => fun _48344 : K -> A -> Prop => @GSPEC (K -> A) (fun GEN_PVAR_142 : K -> A => exists f : K -> A, @SETSPEC (K -> A) GEN_PVAR_142 ((@EXTENSIONAL K A _48343 f) /\ (forall i : K, (@IN K i _48343) -> @IN A (f i) (_48344 i))) f)).
Proof. exact (eq_refl (@cartesian_product A K)). Qed.
Definition product_map {A B K : Type'} : (K -> Prop) -> (K -> A -> B) -> (K -> A) -> K -> B := fun _49392 : K -> Prop => fun _49393 : K -> A -> B => fun x : K -> A => @RESTRICTION K B _49392 (fun i : K => _49393 i (x i)).
Lemma product_map_def {A B K : Type'} : (@product_map A B K) = (fun _49392 : K -> Prop => fun _49393 : K -> A -> B => fun x : K -> A => @RESTRICTION K B _49392 (fun i : K => _49393 i (x i))).
Proof. exact (eq_refl (@product_map A B K)). Qed.
Definition disjoint_union {A K : Type'} : (K -> Prop) -> (K -> A -> Prop) -> (prod K A) -> Prop := fun _49528 : K -> Prop => fun _49529 : K -> A -> Prop => @GSPEC (prod K A) (fun GEN_PVAR_145 : prod K A => exists i : K, exists x : A, @SETSPEC (prod K A) GEN_PVAR_145 ((@IN K i _49528) /\ (@IN A x (_49529 i))) (@pair K A i x)).
Lemma disjoint_union_def {A K : Type'} : (@disjoint_union A K) = (fun _49528 : K -> Prop => fun _49529 : K -> A -> Prop => @GSPEC (prod K A) (fun GEN_PVAR_145 : prod K A => exists i : K, exists x : A, @SETSPEC (prod K A) GEN_PVAR_145 ((@IN K i _49528) /\ (@IN A x (_49529 i))) (@pair K A i x))).
Proof. exact (eq_refl (@disjoint_union A K)). Qed.
Definition set_of_list {A : Type'} : (list A) -> A -> Prop := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (list A) -> A -> Prop) (fun set_of_list' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (list A) -> A -> Prop => forall _56425 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))), ((set_of_list' _56425 (@nil A)) = (@EMPTY A)) /\ (forall h : A, forall t : list A, (set_of_list' _56425 (@cons A h t)) = (@INSERT A h (set_of_list' _56425 t)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))))))))))))).
Lemma set_of_list_def {A : Type'} : (@set_of_list A) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (list A) -> A -> Prop) (fun set_of_list' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (list A) -> A -> Prop => forall _56425 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))), ((set_of_list' _56425 (@nil A)) = (@EMPTY A)) /\ (forall h : A, forall t : list A, (set_of_list' _56425 (@cons A h t)) = (@INSERT A h (set_of_list' _56425 t)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N))))))))))))))))))).
Proof. exact (eq_refl (@set_of_list A)). Qed.
Definition list_of_set {A : Type'} : (A -> Prop) -> list A := fun _56426 : A -> Prop => @ε (list A) (fun l : list A => ((@set_of_list A l) = _56426) /\ ((@LENGTH A l) = (@CARD A _56426))).
Lemma list_of_set_def {A : Type'} : (@list_of_set A) = (fun _56426 : A -> Prop => @ε (list A) (fun l : list A => ((@set_of_list A l) = _56426) /\ ((@LENGTH A l) = (@CARD A _56426)))).
Proof. exact (eq_refl (@list_of_set A)). Qed.
Definition pairwise {A : Type'} : (A -> A -> Prop) -> (A -> Prop) -> Prop := fun _56616 : A -> A -> Prop => fun _56617 : A -> Prop => forall x : A, forall y : A, ((@IN A x _56617) /\ ((@IN A y _56617) /\ (~ (x = y)))) -> _56616 x y.
Lemma pairwise_def {A : Type'} : (@pairwise A) = (fun _56616 : A -> A -> Prop => fun _56617 : A -> Prop => forall x : A, forall y : A, ((@IN A x _56617) /\ ((@IN A y _56617) /\ (~ (x = y)))) -> _56616 x y).
Proof. exact (eq_refl (@pairwise A)). Qed.
Definition UNION_OF {A : Type'} : (((A -> Prop) -> Prop) -> Prop) -> ((A -> Prop) -> Prop) -> (A -> Prop) -> Prop := fun _57329 : ((A -> Prop) -> Prop) -> Prop => fun _57330 : (A -> Prop) -> Prop => fun s : A -> Prop => exists u : (A -> Prop) -> Prop, (_57329 u) /\ ((forall c : A -> Prop, (@IN (A -> Prop) c u) -> _57330 c) /\ ((@UNIONS A u) = s)).
Lemma UNION_OF_def {A : Type'} : (@UNION_OF A) = (fun _57329 : ((A -> Prop) -> Prop) -> Prop => fun _57330 : (A -> Prop) -> Prop => fun s : A -> Prop => exists u : (A -> Prop) -> Prop, (_57329 u) /\ ((forall c : A -> Prop, (@IN (A -> Prop) c u) -> _57330 c) /\ ((@UNIONS A u) = s))).
Proof. exact (eq_refl (@UNION_OF A)). Qed.
Definition INTERSECTION_OF {A : Type'} : (((A -> Prop) -> Prop) -> Prop) -> ((A -> Prop) -> Prop) -> (A -> Prop) -> Prop := fun _57341 : ((A -> Prop) -> Prop) -> Prop => fun _57342 : (A -> Prop) -> Prop => fun s : A -> Prop => exists u : (A -> Prop) -> Prop, (_57341 u) /\ ((forall c : A -> Prop, (@IN (A -> Prop) c u) -> _57342 c) /\ ((@INTERS A u) = s)).
Lemma INTERSECTION_OF_def {A : Type'} : (@INTERSECTION_OF A) = (fun _57341 : ((A -> Prop) -> Prop) -> Prop => fun _57342 : (A -> Prop) -> Prop => fun s : A -> Prop => exists u : (A -> Prop) -> Prop, (_57341 u) /\ ((forall c : A -> Prop, (@IN (A -> Prop) c u) -> _57342 c) /\ ((@INTERS A u) = s))).
Proof. exact (eq_refl (@INTERSECTION_OF A)). Qed.
Definition ARBITRARY {A : Type'} : ((A -> Prop) -> Prop) -> Prop := fun _57477 : (A -> Prop) -> Prop => True.
Lemma ARBITRARY_def {A : Type'} : (@ARBITRARY A) = (fun _57477 : (A -> Prop) -> Prop => True).
Proof. exact (eq_refl (@ARBITRARY A)). Qed.
Definition le_c {A B : Type'} : (A -> Prop) -> (B -> Prop) -> Prop := fun _64071 : A -> Prop => fun _64072 : B -> Prop => exists f : A -> B, (forall x : A, (@IN A x _64071) -> @IN B (f x) _64072) /\ (forall x : A, forall y : A, ((@IN A x _64071) /\ ((@IN A y _64071) /\ ((f x) = (f y)))) -> x = y).
Lemma le_c_def {A B : Type'} : (@le_c A B) = (fun _64071 : A -> Prop => fun _64072 : B -> Prop => exists f : A -> B, (forall x : A, (@IN A x _64071) -> @IN B (f x) _64072) /\ (forall x : A, forall y : A, ((@IN A x _64071) /\ ((@IN A y _64071) /\ ((f x) = (f y)))) -> x = y)).
Proof. exact (eq_refl (@le_c A B)). Qed.
Definition lt_c {A B : Type'} : (A -> Prop) -> (B -> Prop) -> Prop := fun _64083 : A -> Prop => fun _64084 : B -> Prop => (@le_c A B _64083 _64084) /\ (~ (@le_c B A _64084 _64083)).
Lemma lt_c_def {A B : Type'} : (@lt_c A B) = (fun _64083 : A -> Prop => fun _64084 : B -> Prop => (@le_c A B _64083 _64084) /\ (~ (@le_c B A _64084 _64083))).
Proof. exact (eq_refl (@lt_c A B)). Qed.
Definition eq_c {A B : Type'} : (A -> Prop) -> (B -> Prop) -> Prop := fun _64095 : A -> Prop => fun _64096 : B -> Prop => exists f : A -> B, (forall x : A, (@IN A x _64095) -> @IN B (f x) _64096) /\ (forall y : B, (@IN B y _64096) -> @ex1 A (fun x : A => (@IN A x _64095) /\ ((f x) = y))).
Lemma eq_c_def {A B : Type'} : (@eq_c A B) = (fun _64095 : A -> Prop => fun _64096 : B -> Prop => exists f : A -> B, (forall x : A, (@IN A x _64095) -> @IN B (f x) _64096) /\ (forall y : B, (@IN B y _64096) -> @ex1 A (fun x : A => (@IN A x _64095) /\ ((f x) = y)))).
Proof. exact (eq_refl (@eq_c A B)). Qed.
Definition ge_c {A B : Type'} : (A -> Prop) -> (B -> Prop) -> Prop := fun _64107 : A -> Prop => fun _64108 : B -> Prop => @le_c B A _64108 _64107.
Lemma ge_c_def {A B : Type'} : (@ge_c A B) = (fun _64107 : A -> Prop => fun _64108 : B -> Prop => @le_c B A _64108 _64107).
Proof. exact (eq_refl (@ge_c A B)). Qed.
Definition gt_c {A B : Type'} : (A -> Prop) -> (B -> Prop) -> Prop := fun _64119 : A -> Prop => fun _64120 : B -> Prop => @lt_c B A _64120 _64119.
Lemma gt_c_def {A B : Type'} : (@gt_c A B) = (fun _64119 : A -> Prop => fun _64120 : B -> Prop => @lt_c B A _64120 _64119).
Proof. exact (eq_refl (@gt_c A B)). Qed.
Definition COUNTABLE {A : Type'} : (A -> Prop) -> Prop := fun _64270 : A -> Prop => @ge_c N A (@UNIV N) _64270.
Lemma COUNTABLE_def {A : Type'} : (@COUNTABLE A) = (fun _64270 : A -> Prop => @ge_c N A (@UNIV N) _64270).
Proof. exact (eq_refl (@COUNTABLE A)). Qed.
Definition sup : (R -> Prop) -> R := fun _64275 : R -> Prop => @ε R (fun a : R => (forall x : R, (@IN R x _64275) -> Rle x a) /\ (forall b : R, (forall x : R, (@IN R x _64275) -> Rle x b) -> Rle a b)).
Lemma sup_def : sup = (fun _64275 : R -> Prop => @ε R (fun a : R => (forall x : R, (@IN R x _64275) -> Rle x a) /\ (forall b : R, (forall x : R, (@IN R x _64275) -> Rle x b) -> Rle a b))).
Proof. exact (eq_refl sup). Qed.
Definition inf : (R -> Prop) -> R := fun _65134 : R -> Prop => @ε R (fun a : R => (forall x : R, (@IN R x _65134) -> Rle a x) /\ (forall b : R, (forall x : R, (@IN R x _65134) -> Rle b x) -> Rle b a)).
Lemma inf_def : inf = (fun _65134 : R -> Prop => @ε R (fun a : R => (forall x : R, (@IN R x _65134) -> Rle a x) /\ (forall b : R, (forall x : R, (@IN R x _65134) -> Rle b x) -> Rle b a))).
Proof. exact (eq_refl inf). Qed.
Definition has_inf : (R -> Prop) -> R -> Prop := fun _66484 : R -> Prop => fun _66485 : R => forall c : R, (forall x : R, (@IN R x _66484) -> Rle c x) = (Rle c _66485).
Lemma has_inf_def : has_inf = (fun _66484 : R -> Prop => fun _66485 : R => forall c : R, (forall x : R, (@IN R x _66484) -> Rle c x) = (Rle c _66485)).
Proof. exact (eq_refl has_inf). Qed.
Definition has_sup : (R -> Prop) -> R -> Prop := fun _66496 : R -> Prop => fun _66497 : R => forall c : R, (forall x : R, (@IN R x _66496) -> Rle x c) = (Rle _66497 c).
Lemma has_sup_def : has_sup = (fun _66496 : R -> Prop => fun _66497 : R => forall c : R, (forall x : R, (@IN R x _66496) -> Rle x c) = (Rle _66497 c)).
Proof. exact (eq_refl has_sup). Qed.
Definition dotdot : N -> N -> N -> Prop := fun _66922 : N => fun _66923 : N => @GSPEC N (fun GEN_PVAR_231 : N => exists x : N, @SETSPEC N GEN_PVAR_231 ((N.le _66922 x) /\ (N.le x _66923)) x).
Lemma dotdot_def : dotdot = (fun _66922 : N => fun _66923 : N => @GSPEC N (fun GEN_PVAR_231 : N => exists x : N, @SETSPEC N GEN_PVAR_231 ((N.le _66922 x) /\ (N.le x _66923)) x)).
Proof. exact (eq_refl dotdot). Qed.
Definition neutral {A : Type'} : (A -> A -> A) -> A := fun _68834 : A -> A -> A => @ε A (fun x : A => forall y : A, ((_68834 x y) = y) /\ ((_68834 y x) = y)).
Lemma neutral_def {A : Type'} : (@neutral A) = (fun _68834 : A -> A -> A => @ε A (fun x : A => forall y : A, ((_68834 x y) = y) /\ ((_68834 y x) = y))).
Proof. exact (eq_refl (@neutral A)). Qed.
Definition monoidal {A : Type'} : (A -> A -> A) -> Prop := fun _68839 : A -> A -> A => (forall x : A, forall y : A, (_68839 x y) = (_68839 y x)) /\ ((forall x : A, forall y : A, forall z : A, (_68839 x (_68839 y z)) = (_68839 (_68839 x y) z)) /\ (forall x : A, (_68839 (@neutral A _68839) x) = x)).
Lemma monoidal_def {A : Type'} : (@monoidal A) = (fun _68839 : A -> A -> A => (forall x : A, forall y : A, (_68839 x y) = (_68839 y x)) /\ ((forall x : A, forall y : A, forall z : A, (_68839 x (_68839 y z)) = (_68839 (_68839 x y) z)) /\ (forall x : A, (_68839 (@neutral A _68839) x) = x))).
Proof. exact (eq_refl (@monoidal A)). Qed.
Definition support {A B : Type'} : (B -> B -> B) -> (A -> B) -> (A -> Prop) -> A -> Prop := fun _68924 : B -> B -> B => fun _68925 : A -> B => fun _68926 : A -> Prop => @GSPEC A (fun GEN_PVAR_239 : A => exists x : A, @SETSPEC A GEN_PVAR_239 ((@IN A x _68926) /\ (~ ((_68925 x) = (@neutral B _68924)))) x).
Lemma support_def {A B : Type'} : (@support A B) = (fun _68924 : B -> B -> B => fun _68925 : A -> B => fun _68926 : A -> Prop => @GSPEC A (fun GEN_PVAR_239 : A => exists x : A, @SETSPEC A GEN_PVAR_239 ((@IN A x _68926) /\ (~ ((_68925 x) = (@neutral B _68924)))) x)).
Proof. exact (eq_refl (@support A B)). Qed.
Definition iterate {A B : Type'} : (B -> B -> B) -> (A -> Prop) -> (A -> B) -> B := fun _68945 : B -> B -> B => fun _68946 : A -> Prop => fun _68947 : A -> B => @COND B (@FINITE A (@support A B _68945 _68947 _68946)) (@ITSET A B (fun x : A => fun a : B => _68945 (_68947 x) a) (@support A B _68945 _68947 _68946) (@neutral B _68945)) (@neutral B _68945).
Lemma iterate_def {A B : Type'} : (@iterate A B) = (fun _68945 : B -> B -> B => fun _68946 : A -> Prop => fun _68947 : A -> B => @COND B (@FINITE A (@support A B _68945 _68947 _68946)) (@ITSET A B (fun x : A => fun a : B => _68945 (_68947 x) a) (@support A B _68945 _68947 _68946) (@neutral B _68945)) (@neutral B _68945)).
Proof. exact (eq_refl (@iterate A B)). Qed.
Definition iterato {A K : Type'} : (A -> Prop) -> A -> (A -> A -> A) -> (K -> K -> Prop) -> (K -> Prop) -> (K -> A) -> A := @ε ((prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (A -> Prop) -> A -> (A -> A -> A) -> (K -> K -> Prop) -> (K -> Prop) -> (K -> A) -> A) (fun itty : (prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (A -> Prop) -> A -> (A -> A -> A) -> (K -> K -> Prop) -> (K -> Prop) -> (K -> A) -> A => forall _76701 : prod N (prod N (prod N (prod N (prod N (prod N N))))), forall dom : A -> Prop, forall neut : A, forall op : A -> A -> A, forall ltle : K -> K -> Prop, forall k : K -> Prop, forall f : K -> A, (itty _76701 dom neut op ltle k f) = (@COND A ((@FINITE K (@GSPEC K (fun GEN_PVAR_265 : K => exists i : K, @SETSPEC K GEN_PVAR_265 ((@IN K i k) /\ (@IN A (f i) (@DIFF A dom (@INSERT A neut (@EMPTY A))))) i))) /\ (~ ((@GSPEC K (fun GEN_PVAR_266 : K => exists i : K, @SETSPEC K GEN_PVAR_266 ((@IN K i k) /\ (@IN A (f i) (@DIFF A dom (@INSERT A neut (@EMPTY A))))) i)) = (@EMPTY K)))) (@LET K A (fun i : K => @LET_END A (op (f i) (itty _76701 dom neut op ltle (@GSPEC K (fun GEN_PVAR_267 : K => exists j : K, @SETSPEC K GEN_PVAR_267 ((@IN K j (@DELETE K k i)) /\ (@IN A (f j) (@DIFF A dom (@INSERT A neut (@EMPTY A))))) j)) f))) (@COND K (exists i : K, (@IN K i k) /\ ((@IN A (f i) (@DIFF A dom (@INSERT A neut (@EMPTY A)))) /\ (forall j : K, ((ltle j i) /\ ((@IN K j k) /\ (@IN A (f j) (@DIFF A dom (@INSERT A neut (@EMPTY A)))))) -> j = i))) (@ε K (fun i : K => (@IN K i k) /\ ((@IN A (f i) (@DIFF A dom (@INSERT A neut (@EMPTY A)))) /\ (forall j : K, ((ltle j i) /\ ((@IN K j k) /\ (@IN A (f j) (@DIFF A dom (@INSERT A neut (@EMPTY A)))))) -> j = i)))) (@ε K (fun i : K => (@IN K i k) /\ (@IN A (f i) (@DIFF A dom (@INSERT A neut (@EMPTY A)))))))) neut)) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))))))))).
Lemma iterato_def {A K : Type'} : (@iterato A K) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (A -> Prop) -> A -> (A -> A -> A) -> (K -> K -> Prop) -> (K -> Prop) -> (K -> A) -> A) (fun itty : (prod N (prod N (prod N (prod N (prod N (prod N N)))))) -> (A -> Prop) -> A -> (A -> A -> A) -> (K -> K -> Prop) -> (K -> Prop) -> (K -> A) -> A => forall _76701 : prod N (prod N (prod N (prod N (prod N (prod N N))))), forall dom : A -> Prop, forall neut : A, forall op : A -> A -> A, forall ltle : K -> K -> Prop, forall k : K -> Prop, forall f : K -> A, (itty _76701 dom neut op ltle k f) = (@COND A ((@FINITE K (@GSPEC K (fun GEN_PVAR_265 : K => exists i : K, @SETSPEC K GEN_PVAR_265 ((@IN K i k) /\ (@IN A (f i) (@DIFF A dom (@INSERT A neut (@EMPTY A))))) i))) /\ (~ ((@GSPEC K (fun GEN_PVAR_266 : K => exists i : K, @SETSPEC K GEN_PVAR_266 ((@IN K i k) /\ (@IN A (f i) (@DIFF A dom (@INSERT A neut (@EMPTY A))))) i)) = (@EMPTY K)))) (@LET K A (fun i : K => @LET_END A (op (f i) (itty _76701 dom neut op ltle (@GSPEC K (fun GEN_PVAR_267 : K => exists j : K, @SETSPEC K GEN_PVAR_267 ((@IN K j (@DELETE K k i)) /\ (@IN A (f j) (@DIFF A dom (@INSERT A neut (@EMPTY A))))) j)) f))) (@COND K (exists i : K, (@IN K i k) /\ ((@IN A (f i) (@DIFF A dom (@INSERT A neut (@EMPTY A)))) /\ (forall j : K, ((ltle j i) /\ ((@IN K j k) /\ (@IN A (f j) (@DIFF A dom (@INSERT A neut (@EMPTY A)))))) -> j = i))) (@ε K (fun i : K => (@IN K i k) /\ ((@IN A (f i) (@DIFF A dom (@INSERT A neut (@EMPTY A)))) /\ (forall j : K, ((ltle j i) /\ ((@IN K j k) /\ (@IN A (f j) (@DIFF A dom (@INSERT A neut (@EMPTY A)))))) -> j = i)))) (@ε K (fun i : K => (@IN K i k) /\ (@IN A (f i) (@DIFF A dom (@INSERT A neut (@EMPTY A)))))))) neut)) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N))))))))))))))).
Proof. exact (eq_refl (@iterato A K)). Qed.
Definition nproduct {A : Type'} : (A -> Prop) -> (A -> N) -> N := @iterate A N N.mul.
Lemma nproduct_def {A : Type'} : (@nproduct A) = (@iterate A N N.mul).
Proof. exact (eq_refl (@nproduct A)). Qed.
Definition iproduct {A : Type'} : (A -> Prop) -> (A -> Z) -> Z := @iterate A Z int_mul.
Lemma iproduct_def {A : Type'} : (@iproduct A) = (@iterate A Z int_mul).
Proof. exact (eq_refl (@iproduct A)). Qed.
Definition product {A : Type'} : (A -> Prop) -> (A -> R) -> R := @iterate A R Rmult.
Lemma product_def {A : Type'} : (@product A) = (@iterate A R Rmult).
Proof. exact (eq_refl (@product A)). Qed.
Definition isum {A : Type'} : (A -> Prop) -> (A -> Z) -> Z := @iterate A Z int_add.
Lemma isum_def {A : Type'} : (@isum A) = (@iterate A Z int_add).
Proof. exact (eq_refl (@isum A)). Qed.
Definition nsum {A : Type'} : (A -> Prop) -> (A -> N) -> N := @iterate A N N.add.
Lemma nsum_def {A : Type'} : (@nsum A) = (@iterate A N N.add).
Proof. exact (eq_refl (@nsum A)). Qed.
Definition sum {A : Type'} : (A -> Prop) -> (A -> R) -> R := @iterate A R Rplus.
Lemma sum_def {A : Type'} : (@sum A) = (@iterate A R Rplus).
Proof. exact (eq_refl (@sum A)). Qed.
Definition polynomial_function : (R -> R) -> Prop := fun _94114 : R -> R => exists m : N, exists c : N -> R, forall x : R, (_94114 x) = (@sum N (dotdot (NUMERAL 0%N) m) (fun i : N => Rmult (c i) (real_pow x i))).
Lemma polynomial_function_def : polynomial_function = (fun _94114 : R -> R => exists m : N, exists c : N -> R, forall x : R, (_94114 x) = (@sum N (dotdot (NUMERAL 0%N) m) (fun i : N => Rmult (c i) (real_pow x i)))).
Proof. exact (eq_refl polynomial_function). Qed.
Definition dimindex {A : Type'} : (A -> Prop) -> N := fun _94156 : A -> Prop => @COND N (@FINITE A (@UNIV A)) (@CARD A (@UNIV A)) (NUMERAL (BIT1 0%N)).
Lemma dimindex_def {A : Type'} : (@dimindex A) = (fun _94156 : A -> Prop => @COND N (@FINITE A (@UNIV A)) (@CARD A (@UNIV A)) (NUMERAL (BIT1 0%N))).
Proof. exact (eq_refl (@dimindex A)). Qed.
Definition dollar {A N' : Type'} : (cart A N') -> N -> A := fun _94566 : cart A N' => fun _94567 : N => @dest_cart A N' _94566 (@finite_index N' _94567).
Lemma dollar_def {A N' : Type'} : (@dollar A N') = (fun _94566 : cart A N' => fun _94567 : N => @dest_cart A N' _94566 (@finite_index N' _94567)).
Proof. exact (eq_refl (@dollar A N')). Qed.
Definition lambda {A B : Type'} : (N -> A) -> cart A B := fun _94602 : N -> A => @ε (cart A B) (fun f : cart A B => forall i : N, ((N.le (NUMERAL (BIT1 0%N)) i) /\ (N.le i (@dimindex B (@UNIV B)))) -> (@dollar A B f i) = (_94602 i)).
Lemma lambda_def {A B : Type'} : (@lambda A B) = (fun _94602 : N -> A => @ε (cart A B) (fun f : cart A B => forall i : N, ((N.le (NUMERAL (BIT1 0%N)) i) /\ (N.le i (@dimindex B (@UNIV B)))) -> (@dollar A B f i) = (_94602 i))).
Proof. exact (eq_refl (@lambda A B)). Qed.
Definition pastecart {A M N' : Type'} : (cart A M) -> (cart A N') -> cart A (finite_sum M N') := fun _94893 : cart A M => fun _94894 : cart A N' => @lambda A (finite_sum M N') (fun i : N => @COND A (N.le i (@dimindex M (@UNIV M))) (@dollar A M _94893 i) (@dollar A N' _94894 (N.sub i (@dimindex M (@UNIV M))))).
Lemma pastecart_def {A M N' : Type'} : (@pastecart A M N') = (fun _94893 : cart A M => fun _94894 : cart A N' => @lambda A (finite_sum M N') (fun i : N => @COND A (N.le i (@dimindex M (@UNIV M))) (@dollar A M _94893 i) (@dollar A N' _94894 (N.sub i (@dimindex M (@UNIV M)))))).
Proof. exact (eq_refl (@pastecart A M N')). Qed.
Definition fstcart {A M N' : Type'} : (cart A (finite_sum M N')) -> cart A M := fun _94905 : cart A (finite_sum M N') => @lambda A M (fun i : N => @dollar A (finite_sum M N') _94905 i).
Lemma fstcart_def {A M N' : Type'} : (@fstcart A M N') = (fun _94905 : cart A (finite_sum M N') => @lambda A M (fun i : N => @dollar A (finite_sum M N') _94905 i)).
Proof. exact (eq_refl (@fstcart A M N')). Qed.
Definition sndcart {A M N' : Type'} : (cart A (finite_sum M N')) -> cart A N' := fun _94910 : cart A (finite_sum M N') => @lambda A N' (fun i : N => @dollar A (finite_sum M N') _94910 (N.add i (@dimindex M (@UNIV M)))).
Lemma sndcart_def {A M N' : Type'} : (@sndcart A M N') = (fun _94910 : cart A (finite_sum M N') => @lambda A N' (fun i : N => @dollar A (finite_sum M N') _94910 (N.add i (@dimindex M (@UNIV M))))).
Proof. exact (eq_refl (@sndcart A M N')). Qed.
Definition _100320 {A : Type'} : (finite_sum A A) -> tybit0 A := fun a : finite_sum A A => @_mk_tybit0 A ((fun a' : finite_sum A A => @CONSTR (finite_sum A A) (NUMERAL 0%N) a' (fun n : N => @BOTTOM (finite_sum A A))) a).
Lemma _100320_def {A : Type'} : (@_100320 A) = (fun a : finite_sum A A => @_mk_tybit0 A ((fun a' : finite_sum A A => @CONSTR (finite_sum A A) (NUMERAL 0%N) a' (fun n : N => @BOTTOM (finite_sum A A))) a)).
Proof. exact (eq_refl (@_100320 A)). Qed.
Definition mktybit0 {A : Type'} : (finite_sum A A) -> tybit0 A := @_100320 A.
Lemma mktybit0_def {A : Type'} : (@mktybit0 A) = (@_100320 A).
Proof. exact (eq_refl (@mktybit0 A)). Qed.
Definition _100339 {A : Type'} : (finite_sum (finite_sum A A) unit) -> tybit1 A := fun a : finite_sum (finite_sum A A) unit => @_mk_tybit1 A ((fun a' : finite_sum (finite_sum A A) unit => @CONSTR (finite_sum (finite_sum A A) unit) (NUMERAL 0%N) a' (fun n : N => @BOTTOM (finite_sum (finite_sum A A) unit))) a).
Lemma _100339_def {A : Type'} : (@_100339 A) = (fun a : finite_sum (finite_sum A A) unit => @_mk_tybit1 A ((fun a' : finite_sum (finite_sum A A) unit => @CONSTR (finite_sum (finite_sum A A) unit) (NUMERAL 0%N) a' (fun n : N => @BOTTOM (finite_sum (finite_sum A A) unit))) a)).
Proof. exact (eq_refl (@_100339 A)). Qed.
Definition mktybit1 {A : Type'} : (finite_sum (finite_sum A A) unit) -> tybit1 A := @_100339 A.
Lemma mktybit1_def {A : Type'} : (@mktybit1 A) = (@_100339 A).
Proof. exact (eq_refl (@mktybit1 A)). Qed.
Definition vector {A N' : Type'} : (list A) -> cart A N' := fun _102033 : list A => @lambda A N' (fun i : N => @EL A (N.sub i (NUMERAL (BIT1 0%N))) _102033).
Lemma vector_def {A N' : Type'} : (@vector A N') = (fun _102033 : list A => @lambda A N' (fun i : N => @EL A (N.sub i (NUMERAL (BIT1 0%N))) _102033)).
Proof. exact (eq_refl (@vector A N')). Qed.
Definition PCROSS {A M N' : Type'} : ((cart A M) -> Prop) -> ((cart A N') -> Prop) -> (cart A (finite_sum M N')) -> Prop := fun _102060 : (cart A M) -> Prop => fun _102061 : (cart A N') -> Prop => @GSPEC (cart A (finite_sum M N')) (fun GEN_PVAR_363 : cart A (finite_sum M N') => exists x : cart A M, exists y : cart A N', @SETSPEC (cart A (finite_sum M N')) GEN_PVAR_363 ((@IN (cart A M) x _102060) /\ (@IN (cart A N') y _102061)) (@pastecart A M N' x y)).
Lemma PCROSS_def {A M N' : Type'} : (@PCROSS A M N') = (fun _102060 : (cart A M) -> Prop => fun _102061 : (cart A N') -> Prop => @GSPEC (cart A (finite_sum M N')) (fun GEN_PVAR_363 : cart A (finite_sum M N') => exists x : cart A M, exists y : cart A N', @SETSPEC (cart A (finite_sum M N')) GEN_PVAR_363 ((@IN (cart A M) x _102060) /\ (@IN (cart A N') y _102061)) (@pastecart A M N' x y))).
Proof. exact (eq_refl (@PCROSS A M N')). Qed.
Definition CASEWISE {_137714 _137750 _137754 _137755 : Type'} : (list (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714))) -> _137755 -> _137754 -> _137714 := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> (list (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714))) -> _137755 -> _137754 -> _137714) (fun CASEWISE' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> (list (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714))) -> _137755 -> _137754 -> _137714 => forall _102665 : prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))), (forall f : _137755, forall x : _137754, (CASEWISE' _102665 (@nil (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714))) f x) = (@ε _137714 (fun y : _137714 => True))) /\ (forall h : prod (_137750 -> _137754) (_137755 -> _137750 -> _137714), forall t : list (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714)), forall f : _137755, forall x : _137754, (CASEWISE' _102665 (@cons (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714)) h t) f x) = (@COND _137714 (exists y : _137750, (@fst (_137750 -> _137754) (_137755 -> _137750 -> _137714) h y) = x) (@snd (_137750 -> _137754) (_137755 -> _137750 -> _137714) h f (@ε _137750 (fun y : _137750 => (@fst (_137750 -> _137754) (_137755 -> _137750 -> _137714) h y) = x))) (CASEWISE' _102665 t f x)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N))))))))))))))).
Lemma CASEWISE_def {_137714 _137750 _137754 _137755 : Type'} : (@CASEWISE _137714 _137750 _137754 _137755) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> (list (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714))) -> _137755 -> _137754 -> _137714) (fun CASEWISE' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) -> (list (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714))) -> _137755 -> _137754 -> _137714 => forall _102665 : prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))), (forall f : _137755, forall x : _137754, (CASEWISE' _102665 (@nil (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714))) f x) = (@ε _137714 (fun y : _137714 => True))) /\ (forall h : prod (_137750 -> _137754) (_137755 -> _137750 -> _137714), forall t : list (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714)), forall f : _137755, forall x : _137754, (CASEWISE' _102665 (@cons (prod (_137750 -> _137754) (_137755 -> _137750 -> _137714)) h t) f x) = (@COND _137714 (exists y : _137750, (@fst (_137750 -> _137754) (_137755 -> _137750 -> _137714) h y) = x) (@snd (_137750 -> _137754) (_137755 -> _137750 -> _137714) h f (@ε _137750 (fun y : _137750 => (@fst (_137750 -> _137754) (_137755 -> _137750 -> _137714) h y) = x))) (CASEWISE' _102665 t f x)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))))))))))).
Proof. exact (eq_refl (@CASEWISE _137714 _137750 _137754 _137755)). Qed.
Definition admissible {_138045 _138048 _138052 _138053 _138058 : Type'} : (_138052 -> _138045 -> Prop) -> ((_138052 -> _138048) -> _138058 -> Prop) -> (_138058 -> _138045) -> ((_138052 -> _138048) -> _138058 -> _138053) -> Prop := fun _103732 : _138052 -> _138045 -> Prop => fun _103733 : (_138052 -> _138048) -> _138058 -> Prop => fun _103734 : _138058 -> _138045 => fun _103735 : (_138052 -> _138048) -> _138058 -> _138053 => forall f : _138052 -> _138048, forall g : _138052 -> _138048, forall a : _138058, ((_103733 f a) /\ ((_103733 g a) /\ (forall z : _138052, (_103732 z (_103734 a)) -> (f z) = (g z)))) -> (_103735 f a) = (_103735 g a).
Lemma admissible_def {_138045 _138048 _138052 _138053 _138058 : Type'} : (@admissible _138045 _138048 _138052 _138053 _138058) = (fun _103732 : _138052 -> _138045 -> Prop => fun _103733 : (_138052 -> _138048) -> _138058 -> Prop => fun _103734 : _138058 -> _138045 => fun _103735 : (_138052 -> _138048) -> _138058 -> _138053 => forall f : _138052 -> _138048, forall g : _138052 -> _138048, forall a : _138058, ((_103733 f a) /\ ((_103733 g a) /\ (forall z : _138052, (_103732 z (_103734 a)) -> (f z) = (g z)))) -> (_103735 f a) = (_103735 g a)).
Proof. exact (eq_refl (@admissible _138045 _138048 _138052 _138053 _138058)). Qed.
Definition tailadmissible {A B P : Type'} : (A -> A -> Prop) -> ((A -> B) -> P -> Prop) -> (P -> A) -> ((A -> B) -> P -> B) -> Prop := fun _103764 : A -> A -> Prop => fun _103765 : (A -> B) -> P -> Prop => fun _103766 : P -> A => fun _103767 : (A -> B) -> P -> B => exists P' : (A -> B) -> P -> Prop, exists G : (A -> B) -> P -> A, exists H : (A -> B) -> P -> B, (forall f : A -> B, forall a : P, forall y : A, ((P' f a) /\ (_103764 y (G f a))) -> _103764 y (_103766 a)) /\ ((forall f : A -> B, forall g : A -> B, forall a : P, (forall z : A, (_103764 z (_103766 a)) -> (f z) = (g z)) -> ((P' f a) = (P' g a)) /\ (((G f a) = (G g a)) /\ ((H f a) = (H g a)))) /\ (forall f : A -> B, forall a : P, (_103765 f a) -> (_103767 f a) = (@COND B (P' f a) (f (G f a)) (H f a)))).
Lemma tailadmissible_def {A B P : Type'} : (@tailadmissible A B P) = (fun _103764 : A -> A -> Prop => fun _103765 : (A -> B) -> P -> Prop => fun _103766 : P -> A => fun _103767 : (A -> B) -> P -> B => exists P' : (A -> B) -> P -> Prop, exists G : (A -> B) -> P -> A, exists H : (A -> B) -> P -> B, (forall f : A -> B, forall a : P, forall y : A, ((P' f a) /\ (_103764 y (G f a))) -> _103764 y (_103766 a)) /\ ((forall f : A -> B, forall g : A -> B, forall a : P, (forall z : A, (_103764 z (_103766 a)) -> (f z) = (g z)) -> ((P' f a) = (P' g a)) /\ (((G f a) = (G g a)) /\ ((H f a) = (H g a)))) /\ (forall f : A -> B, forall a : P, (_103765 f a) -> (_103767 f a) = (@COND B (P' f a) (f (G f a)) (H f a))))).
Proof. exact (eq_refl (@tailadmissible A B P)). Qed.
Definition superadmissible {_138202 _138204 _138210 : Type'} : (_138202 -> _138202 -> Prop) -> ((_138202 -> _138204) -> _138210 -> Prop) -> (_138210 -> _138202) -> ((_138202 -> _138204) -> _138210 -> _138204) -> Prop := fun _103796 : _138202 -> _138202 -> Prop => fun _103797 : (_138202 -> _138204) -> _138210 -> Prop => fun _103798 : _138210 -> _138202 => fun _103799 : (_138202 -> _138204) -> _138210 -> _138204 => (@admissible _138202 _138204 _138202 Prop _138210 _103796 (fun f : _138202 -> _138204 => fun a : _138210 => True) _103798 _103797) -> @tailadmissible _138202 _138204 _138210 _103796 _103797 _103798 _103799.
Lemma superadmissible_def {_138202 _138204 _138210 : Type'} : (@superadmissible _138202 _138204 _138210) = (fun _103796 : _138202 -> _138202 -> Prop => fun _103797 : (_138202 -> _138204) -> _138210 -> Prop => fun _103798 : _138210 -> _138202 => fun _103799 : (_138202 -> _138204) -> _138210 -> _138204 => (@admissible _138202 _138204 _138202 Prop _138210 _103796 (fun f : _138202 -> _138204 => fun a : _138210 => True) _103798 _103797) -> @tailadmissible _138202 _138204 _138210 _103796 _103797 _103798 _103799).
Proof. exact (eq_refl (@superadmissible _138202 _138204 _138210)). Qed.
Definition fld {A : Type'} : (A -> A -> Prop) -> A -> Prop := fun _113720 : A -> A -> Prop => @GSPEC A (fun GEN_PVAR_372 : A => exists x : A, @SETSPEC A GEN_PVAR_372 (exists y : A, (_113720 x y) \/ (_113720 y x)) x).
Lemma fld_def {A : Type'} : (@fld A) = (fun _113720 : A -> A -> Prop => @GSPEC A (fun GEN_PVAR_372 : A => exists x : A, @SETSPEC A GEN_PVAR_372 (exists y : A, (_113720 x y) \/ (_113720 y x)) x)).
Proof. exact (eq_refl (@fld A)). Qed.
Definition qoset {A : Type'} : (A -> A -> Prop) -> Prop := fun _113775 : A -> A -> Prop => (forall x : A, (@IN A x (@fld A _113775)) -> _113775 x x) /\ (forall x : A, forall y : A, forall z : A, ((_113775 x y) /\ (_113775 y z)) -> _113775 x z).
Lemma qoset_def {A : Type'} : (@qoset A) = (fun _113775 : A -> A -> Prop => (forall x : A, (@IN A x (@fld A _113775)) -> _113775 x x) /\ (forall x : A, forall y : A, forall z : A, ((_113775 x y) /\ (_113775 y z)) -> _113775 x z)).
Proof. exact (eq_refl (@qoset A)). Qed.
Definition poset {A : Type'} : (A -> A -> Prop) -> Prop := fun _113780 : A -> A -> Prop => (forall x : A, (@IN A x (@fld A _113780)) -> _113780 x x) /\ ((forall x : A, forall y : A, forall z : A, ((_113780 x y) /\ (_113780 y z)) -> _113780 x z) /\ (forall x : A, forall y : A, ((_113780 x y) /\ (_113780 y x)) -> x = y)).
Lemma poset_def {A : Type'} : (@poset A) = (fun _113780 : A -> A -> Prop => (forall x : A, (@IN A x (@fld A _113780)) -> _113780 x x) /\ ((forall x : A, forall y : A, forall z : A, ((_113780 x y) /\ (_113780 y z)) -> _113780 x z) /\ (forall x : A, forall y : A, ((_113780 x y) /\ (_113780 y x)) -> x = y))).
Proof. exact (eq_refl (@poset A)). Qed.
Definition toset {A : Type'} : (A -> A -> Prop) -> Prop := fun _113785 : A -> A -> Prop => (forall x : A, (@IN A x (@fld A _113785)) -> _113785 x x) /\ ((forall x : A, forall y : A, forall z : A, ((_113785 x y) /\ (_113785 y z)) -> _113785 x z) /\ ((forall x : A, forall y : A, ((_113785 x y) /\ (_113785 y x)) -> x = y) /\ (forall x : A, forall y : A, ((@IN A x (@fld A _113785)) /\ (@IN A y (@fld A _113785))) -> (_113785 x y) \/ (_113785 y x)))).
Lemma toset_def {A : Type'} : (@toset A) = (fun _113785 : A -> A -> Prop => (forall x : A, (@IN A x (@fld A _113785)) -> _113785 x x) /\ ((forall x : A, forall y : A, forall z : A, ((_113785 x y) /\ (_113785 y z)) -> _113785 x z) /\ ((forall x : A, forall y : A, ((_113785 x y) /\ (_113785 y x)) -> x = y) /\ (forall x : A, forall y : A, ((@IN A x (@fld A _113785)) /\ (@IN A y (@fld A _113785))) -> (_113785 x y) \/ (_113785 y x))))).
Proof. exact (eq_refl (@toset A)). Qed.
Definition woset {A : Type'} : (A -> A -> Prop) -> Prop := fun _113790 : A -> A -> Prop => (forall x : A, (@IN A x (@fld A _113790)) -> _113790 x x) /\ ((forall x : A, forall y : A, forall z : A, ((_113790 x y) /\ (_113790 y z)) -> _113790 x z) /\ ((forall x : A, forall y : A, ((_113790 x y) /\ (_113790 y x)) -> x = y) /\ ((forall x : A, forall y : A, ((@IN A x (@fld A _113790)) /\ (@IN A y (@fld A _113790))) -> (_113790 x y) \/ (_113790 y x)) /\ (forall s : A -> Prop, ((@SUBSET A s (@fld A _113790)) /\ (~ (s = (@EMPTY A)))) -> exists x : A, (@IN A x s) /\ (forall y : A, (@IN A y s) -> _113790 x y))))).
Lemma woset_def {A : Type'} : (@woset A) = (fun _113790 : A -> A -> Prop => (forall x : A, (@IN A x (@fld A _113790)) -> _113790 x x) /\ ((forall x : A, forall y : A, forall z : A, ((_113790 x y) /\ (_113790 y z)) -> _113790 x z) /\ ((forall x : A, forall y : A, ((_113790 x y) /\ (_113790 y x)) -> x = y) /\ ((forall x : A, forall y : A, ((@IN A x (@fld A _113790)) /\ (@IN A y (@fld A _113790))) -> (_113790 x y) \/ (_113790 y x)) /\ (forall s : A -> Prop, ((@SUBSET A s (@fld A _113790)) /\ (~ (s = (@EMPTY A)))) -> exists x : A, (@IN A x s) /\ (forall y : A, (@IN A y s) -> _113790 x y)))))).
Proof. exact (eq_refl (@woset A)). Qed.
Definition wqoset {A : Type'} : (A -> A -> Prop) -> Prop := fun _113795 : A -> A -> Prop => (forall x : A, (@IN A x (@fld A _113795)) -> _113795 x x) /\ ((forall x : A, forall y : A, forall z : A, ((_113795 x y) /\ (_113795 y z)) -> _113795 x z) /\ (forall s : A -> Prop, (@SUBSET A s (@fld A _113795)) -> exists t : A -> Prop, (@FINITE A t) /\ ((@SUBSET A t s) /\ (forall y : A, (@IN A y s) -> exists x : A, (@IN A x t) /\ (_113795 x y))))).
Lemma wqoset_def {A : Type'} : (@wqoset A) = (fun _113795 : A -> A -> Prop => (forall x : A, (@IN A x (@fld A _113795)) -> _113795 x x) /\ ((forall x : A, forall y : A, forall z : A, ((_113795 x y) /\ (_113795 y z)) -> _113795 x z) /\ (forall s : A -> Prop, (@SUBSET A s (@fld A _113795)) -> exists t : A -> Prop, (@FINITE A t) /\ ((@SUBSET A t s) /\ (forall y : A, (@IN A y s) -> exists x : A, (@IN A x t) /\ (_113795 x y)))))).
Proof. exact (eq_refl (@wqoset A)). Qed.
Definition chain {A : Type'} : (A -> A -> Prop) -> (A -> Prop) -> Prop := fun _113800 : A -> A -> Prop => fun _113801 : A -> Prop => forall x : A, forall y : A, ((@IN A x _113801) /\ (@IN A y _113801)) -> (_113800 x y) \/ (_113800 y x).
Lemma chain_def {A : Type'} : (@chain A) = (fun _113800 : A -> A -> Prop => fun _113801 : A -> Prop => forall x : A, forall y : A, ((@IN A x _113801) /\ (@IN A y _113801)) -> (_113800 x y) \/ (_113800 y x)).
Proof. exact (eq_refl (@chain A)). Qed.
Definition antichain {A : Type'} : (A -> A -> Prop) -> (A -> Prop) -> Prop := fun _113812 : A -> A -> Prop => fun _113813 : A -> Prop => (@SUBSET A _113813 (@fld A _113812)) /\ (@pairwise A (fun x : A => fun y : A => ~ (_113812 x y)) _113813).
Lemma antichain_def {A : Type'} : (@antichain A) = (fun _113812 : A -> A -> Prop => fun _113813 : A -> Prop => (@SUBSET A _113813 (@fld A _113812)) /\ (@pairwise A (fun x : A => fun y : A => ~ (_113812 x y)) _113813)).
Proof. exact (eq_refl (@antichain A)). Qed.
Definition strictly {A : Type'} : (A -> A -> Prop) -> A -> A -> Prop := fun _114465 : A -> A -> Prop => fun x : A => fun y : A => (_114465 x y) /\ (~ (_114465 y x)).
Lemma strictly_def {A : Type'} : (@strictly A) = (fun _114465 : A -> A -> Prop => fun x : A => fun y : A => (_114465 x y) /\ (~ (_114465 y x))).
Proof. exact (eq_refl (@strictly A)). Qed.
Definition properly {A : Type'} : (A -> A -> Prop) -> A -> A -> Prop := fun _114470 : A -> A -> Prop => fun x : A => fun y : A => (_114470 x y) /\ (~ (x = y)).
Lemma properly_def {A : Type'} : (@properly A) = (fun _114470 : A -> A -> Prop => fun x : A => fun y : A => (_114470 x y) /\ (~ (x = y))).
Proof. exact (eq_refl (@properly A)). Qed.
Definition inseg {A : Type'} : (A -> A -> Prop) -> (A -> A -> Prop) -> Prop := fun _118731 : A -> A -> Prop => fun _118732 : A -> A -> Prop => forall x : A, forall y : A, (_118731 x y) = ((_118732 x y) /\ (@fld A _118731 y)).
Lemma inseg_def {A : Type'} : (@inseg A) = (fun _118731 : A -> A -> Prop => fun _118732 : A -> A -> Prop => forall x : A, forall y : A, (_118731 x y) = ((_118732 x y) /\ (@fld A _118731 y))).
Proof. exact (eq_refl (@inseg A)). Qed.
Definition linseg {A : Type'} : (A -> A -> Prop) -> A -> A -> A -> Prop := fun _118803 : A -> A -> Prop => fun _118804 : A => fun x : A => fun y : A => (_118803 x y) /\ (@properly A _118803 y _118804).
Lemma linseg_def {A : Type'} : (@linseg A) = (fun _118803 : A -> A -> Prop => fun _118804 : A => fun x : A => fun y : A => (_118803 x y) /\ (@properly A _118803 y _118804)).
Proof. exact (eq_refl (@linseg A)). Qed.
Definition ordinal {A : Type'} : (A -> A -> Prop) -> Prop := fun _118815 : A -> A -> Prop => (@woset A _118815) /\ (forall x : A, (@fld A _118815 x) -> x = (@ε A (fun y : A => ~ (@properly A _118815 y x)))).
Lemma ordinal_def {A : Type'} : (@ordinal A) = (fun _118815 : A -> A -> Prop => (@woset A _118815) /\ (forall x : A, (@fld A _118815 x) -> x = (@ε A (fun y : A => ~ (@properly A _118815 y x))))).
Proof. exact (eq_refl (@ordinal A)). Qed.
Definition add_c {_154958 _154959 : Type'} : (_154959 -> Prop) -> (_154958 -> Prop) -> (Datatypes.sum _154959 _154958) -> Prop := fun _201284 : _154959 -> Prop => fun _201285 : _154958 -> Prop => @UNION (Datatypes.sum _154959 _154958) (@GSPEC (Datatypes.sum _154959 _154958) (fun GEN_PVAR_406 : Datatypes.sum _154959 _154958 => exists x : _154959, @SETSPEC (Datatypes.sum _154959 _154958) GEN_PVAR_406 (@IN _154959 x _201284) (@inl _154959 _154958 x))) (@GSPEC (Datatypes.sum _154959 _154958) (fun GEN_PVAR_407 : Datatypes.sum _154959 _154958 => exists y : _154958, @SETSPEC (Datatypes.sum _154959 _154958) GEN_PVAR_407 (@IN _154958 y _201285) (@inr _154959 _154958 y))).
Lemma add_c_def {_154958 _154959 : Type'} : (@add_c _154958 _154959) = (fun _201284 : _154959 -> Prop => fun _201285 : _154958 -> Prop => @UNION (Datatypes.sum _154959 _154958) (@GSPEC (Datatypes.sum _154959 _154958) (fun GEN_PVAR_406 : Datatypes.sum _154959 _154958 => exists x : _154959, @SETSPEC (Datatypes.sum _154959 _154958) GEN_PVAR_406 (@IN _154959 x _201284) (@inl _154959 _154958 x))) (@GSPEC (Datatypes.sum _154959 _154958) (fun GEN_PVAR_407 : Datatypes.sum _154959 _154958 => exists y : _154958, @SETSPEC (Datatypes.sum _154959 _154958) GEN_PVAR_407 (@IN _154958 y _201285) (@inr _154959 _154958 y)))).
Proof. exact (eq_refl (@add_c _154958 _154959)). Qed.
Definition mul_c {_154991 _154992 : Type'} : (_154992 -> Prop) -> (_154991 -> Prop) -> (prod _154992 _154991) -> Prop := fun _201296 : _154992 -> Prop => fun _201297 : _154991 -> Prop => @GSPEC (prod _154992 _154991) (fun GEN_PVAR_408 : prod _154992 _154991 => exists x : _154992, exists y : _154991, @SETSPEC (prod _154992 _154991) GEN_PVAR_408 ((@IN _154992 x _201296) /\ (@IN _154991 y _201297)) (@pair _154992 _154991 x y)).
Lemma mul_c_def {_154991 _154992 : Type'} : (@mul_c _154991 _154992) = (fun _201296 : _154992 -> Prop => fun _201297 : _154991 -> Prop => @GSPEC (prod _154992 _154991) (fun GEN_PVAR_408 : prod _154992 _154991 => exists x : _154992, exists y : _154991, @SETSPEC (prod _154992 _154991) GEN_PVAR_408 ((@IN _154992 x _201296) /\ (@IN _154991 y _201297)) (@pair _154992 _154991 x y))).
Proof. exact (eq_refl (@mul_c _154991 _154992)). Qed.
Definition pow_c {A B : Type'} : (A -> Prop) -> (B -> Prop) -> (B -> A) -> Prop := fun _237577 : A -> Prop => fun _237578 : B -> Prop => @GSPEC (B -> A) (fun GEN_PVAR_450 : B -> A => exists f : B -> A, @SETSPEC (B -> A) GEN_PVAR_450 ((forall x : B, (@IN B x _237578) -> @IN A (f x) _237577) /\ (forall x : B, (~ (@IN B x _237578)) -> (f x) = (@ε A (fun y : A => False)))) f).
Lemma pow_c_def {A B : Type'} : (@pow_c A B) = (fun _237577 : A -> Prop => fun _237578 : B -> Prop => @GSPEC (B -> A) (fun GEN_PVAR_450 : B -> A => exists f : B -> A, @SETSPEC (B -> A) GEN_PVAR_450 ((forall x : B, (@IN B x _237578) -> @IN A (f x) _237577) /\ (forall x : B, (~ (@IN B x _237578)) -> (f x) = (@ε A (fun y : A => False)))) f)).
Proof. exact (eq_refl (@pow_c A B)). Qed.
Definition permutes {_172930 : Type'} : (_172930 -> _172930) -> (_172930 -> Prop) -> Prop := fun _245176 : _172930 -> _172930 => fun _245177 : _172930 -> Prop => (forall x : _172930, (~ (@IN _172930 x _245177)) -> (_245176 x) = x) /\ (forall y : _172930, @ex1 _172930 (fun x : _172930 => (_245176 x) = y)).
Lemma permutes_def {_172930 : Type'} : (@permutes _172930) = (fun _245176 : _172930 -> _172930 => fun _245177 : _172930 -> Prop => (forall x : _172930, (~ (@IN _172930 x _245177)) -> (_245176 x) = x) /\ (forall y : _172930, @ex1 _172930 (fun x : _172930 => (_245176 x) = y))).
Proof. exact (eq_refl (@permutes _172930)). Qed.
Definition inverse {_172945 _172948 : Type'} : (_172948 -> _172945) -> _172945 -> _172948 := fun _245188 : _172948 -> _172945 => fun y : _172945 => @ε _172948 (fun x : _172948 => (_245188 x) = y).
Lemma inverse_def {_172945 _172948 : Type'} : (@inverse _172945 _172948) = (fun _245188 : _172948 -> _172945 => fun y : _172945 => @ε _172948 (fun x : _172948 => (_245188 x) = y)).
Proof. exact (eq_refl (@inverse _172945 _172948)). Qed.
Definition swap {_173152 : Type'} : (prod _173152 _173152) -> _173152 -> _173152 := fun _245602 : prod _173152 _173152 => fun _245603 : _173152 => @COND _173152 (_245603 = (@fst _173152 _173152 _245602)) (@snd _173152 _173152 _245602) (@COND _173152 (_245603 = (@snd _173152 _173152 _245602)) (@fst _173152 _173152 _245602) _245603).
Lemma swap_def {_173152 : Type'} : (@swap _173152) = (fun _245602 : prod _173152 _173152 => fun _245603 : _173152 => @COND _173152 (_245603 = (@fst _173152 _173152 _245602)) (@snd _173152 _173152 _245602) (@COND _173152 (_245603 = (@snd _173152 _173152 _245602)) (@fst _173152 _173152 _245602) _245603)).
Proof. exact (eq_refl (@swap _173152)). Qed.
Definition swapseq {_196374 : Type'} : N -> (_196374 -> _196374) -> Prop := fun a0 : N => fun a1 : _196374 -> _196374 => forall swapseq' : N -> (_196374 -> _196374) -> Prop, (forall a0' : N, forall a1' : _196374 -> _196374, (((a0' = (NUMERAL 0%N)) /\ (a1' = (@I _196374))) \/ (exists a : _196374, exists b : _196374, exists p : _196374 -> _196374, exists n : N, (a0' = (N.succ n)) /\ ((a1' = (@o _196374 _196374 _196374 (@swap _196374 (@pair _196374 _196374 a b)) p)) /\ ((swapseq' n p) /\ (~ (a = b)))))) -> swapseq' a0' a1') -> swapseq' a0 a1.
Lemma swapseq_def {_196374 : Type'} : (@swapseq _196374) = (fun a0 : N => fun a1 : _196374 -> _196374 => forall swapseq' : N -> (_196374 -> _196374) -> Prop, (forall a0' : N, forall a1' : _196374 -> _196374, (((a0' = (NUMERAL 0%N)) /\ (a1' = (@I _196374))) \/ (exists a : _196374, exists b : _196374, exists p : _196374 -> _196374, exists n : N, (a0' = (N.succ n)) /\ ((a1' = (@o _196374 _196374 _196374 (@swap _196374 (@pair _196374 _196374 a b)) p)) /\ ((swapseq' n p) /\ (~ (a = b)))))) -> swapseq' a0' a1') -> swapseq' a0 a1).
Proof. exact (eq_refl (@swapseq _196374)). Qed.
Definition permutation {_196388 : Type'} : (_196388 -> _196388) -> Prop := fun _253246 : _196388 -> _196388 => exists n : N, @swapseq _196388 n _253246.
Lemma permutation_def {_196388 : Type'} : (@permutation _196388) = (fun _253246 : _196388 -> _196388 => exists n : N, @swapseq _196388 n _253246).
Proof. exact (eq_refl (@permutation _196388)). Qed.
Definition evenperm {_197091 : Type'} : (_197091 -> _197091) -> Prop := fun _256183 : _197091 -> _197091 => EVEN (@ε N (fun n : N => @swapseq _197091 n _256183)).
Lemma evenperm_def {_197091 : Type'} : (@evenperm _197091) = (fun _256183 : _197091 -> _197091 => EVEN (@ε N (fun n : N => @swapseq _197091 n _256183))).
Proof. exact (eq_refl (@evenperm _197091)). Qed.
Definition sign {_198015 : Type'} : (_198015 -> _198015) -> R := fun _258425 : _198015 -> _198015 => @COND R (@evenperm _198015 _258425) (R_of_N (NUMERAL (BIT1 0%N))) (Ropp (R_of_N (NUMERAL (BIT1 0%N)))).
Lemma sign_def {_198015 : Type'} : (@sign _198015) = (fun _258425 : _198015 -> _198015 => @COND R (@evenperm _198015 _258425) (R_of_N (NUMERAL (BIT1 0%N))) (Ropp (R_of_N (NUMERAL (BIT1 0%N))))).
Proof. exact (eq_refl (@sign _198015)). Qed.
Definition rational : R -> Prop := fun _268901 : R => exists m : R, exists n : R, (integer m) /\ ((integer n) /\ ((~ (n = (R_of_N (NUMERAL 0%N)))) /\ (_268901 = (Rdiv m n)))).
Lemma rational_def : rational = (fun _268901 : R => exists m : R, exists n : R, (integer m) /\ ((integer n) /\ ((~ (n = (R_of_N (NUMERAL 0%N)))) /\ (_268901 = (Rdiv m n))))).
Proof. exact (eq_refl rational). Qed.
Definition floor : R -> R := @ε ((prod N (prod N (prod N (prod N N)))) -> R -> R) (fun n : (prod N (prod N (prod N (prod N N)))) -> R -> R => forall _269283 : prod N (prod N (prod N (prod N N))), exists r : R -> R, forall x : R, (integer (n _269283 x)) /\ ((Rle (R_of_N (NUMERAL 0%N)) (r x)) /\ ((Rlt (r x) (R_of_N (NUMERAL (BIT1 0%N)))) /\ (x = (Rplus (n _269283 x) (r x)))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))))))).
Lemma floor_def : floor = (@ε ((prod N (prod N (prod N (prod N N)))) -> R -> R) (fun n : (prod N (prod N (prod N (prod N N)))) -> R -> R => forall _269283 : prod N (prod N (prod N (prod N N))), exists r : R -> R, forall x : R, (integer (n _269283 x)) /\ ((Rle (R_of_N (NUMERAL 0%N)) (r x)) /\ ((Rlt (r x) (R_of_N (NUMERAL (BIT1 0%N)))) /\ (x = (Rplus (n _269283 x) (r x)))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N))))))))))))).
Proof. exact (eq_refl floor). Qed.
Definition frac : R -> R := @ε ((prod N (prod N (prod N N))) -> R -> R) (fun r : (prod N (prod N (prod N N))) -> R -> R => forall _269284 : prod N (prod N (prod N N)), forall x : R, (integer (floor x)) /\ ((Rle (R_of_N (NUMERAL 0%N)) (r _269284 x)) /\ ((Rlt (r _269284 x) (R_of_N (NUMERAL (BIT1 0%N)))) /\ (x = (Rplus (floor x) (r _269284 x)))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N))))))))))).
Lemma frac_def : frac = (@ε ((prod N (prod N (prod N N))) -> R -> R) (fun r : (prod N (prod N (prod N N))) -> R -> R => forall _269284 : prod N (prod N (prod N N)), forall x : R, (integer (floor x)) /\ ((Rle (R_of_N (NUMERAL 0%N)) (r _269284 x)) /\ ((Rlt (r _269284 x) (R_of_N (NUMERAL (BIT1 0%N)))) /\ (x = (Rplus (floor x) (r _269284 x)))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))))))).
Proof. exact (eq_refl frac). Qed.
Definition is_realinterval : (R -> Prop) -> Prop := fun _271022 : R -> Prop => forall a : R, forall b : R, forall c : R, ((@IN R a _271022) /\ ((@IN R b _271022) /\ ((Rle a c) /\ (Rle c b)))) -> @IN R c _271022.
Lemma is_realinterval_def : is_realinterval = (fun _271022 : R -> Prop => forall a : R, forall b : R, forall c : R, ((@IN R a _271022) /\ ((@IN R b _271022) /\ ((Rle a c) /\ (Rle c b)))) -> @IN R c _271022).
Proof. exact (eq_refl is_realinterval). Qed.
Definition open_real_interval : (prod R R) -> R -> Prop := fun _271083 : prod R R => @GSPEC R (fun GEN_PVAR_630 : R => exists x : R, @SETSPEC R GEN_PVAR_630 ((Rlt (@fst R R _271083) x) /\ (Rlt x (@snd R R _271083))) x).
Lemma open_real_interval_def : open_real_interval = (fun _271083 : prod R R => @GSPEC R (fun GEN_PVAR_630 : R => exists x : R, @SETSPEC R GEN_PVAR_630 ((Rlt (@fst R R _271083) x) /\ (Rlt x (@snd R R _271083))) x)).
Proof. exact (eq_refl open_real_interval). Qed.
Definition closed_real_interval : (list (prod R R)) -> R -> Prop := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))) -> (list (prod R R)) -> R -> Prop) (fun closed_real_interval' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))) -> (list (prod R R)) -> R -> Prop => forall _271202 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))), forall a : R, forall b : R, (closed_real_interval' _271202 (@cons (prod R R) (@pair R R a b) (@nil (prod R R)))) = (@GSPEC R (fun GEN_PVAR_631 : R => exists x : R, @SETSPEC R GEN_PVAR_631 ((Rle a x) /\ (Rle x b)) x))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N))))))))))))))))))))))))))).
Lemma closed_real_interval_def : closed_real_interval = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))) -> (list (prod R R)) -> R -> Prop) (fun closed_real_interval' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))) -> (list (prod R R)) -> R -> Prop => forall _271202 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))), forall a : R, forall b : R, (closed_real_interval' _271202 (@cons (prod R R) (@pair R R a b) (@nil (prod R R)))) = (@GSPEC R (fun GEN_PVAR_631 : R => exists x : R, @SETSPEC R GEN_PVAR_631 ((Rle a x) /\ (Rle x b)) x))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))))))))))))))))))))))).
Proof. exact (eq_refl closed_real_interval). Qed.
Definition vectorize {A M N' : Type'} : (cart (cart A N') M) -> cart A (finite_prod M N') := fun x : cart (cart A N') M => @lambda A (finite_prod M N') (fun i : N => @dollar A N' (@dollar (cart A N') M x (N.add (NUMERAL (BIT1 0%N)) (N.div (N.sub i (NUMERAL (BIT1 0%N))) (@dimindex N' (@UNIV N'))))) (N.add (NUMERAL (BIT1 0%N)) (N.modulo (N.sub i (NUMERAL (BIT1 0%N))) (@dimindex N' (@UNIV N'))))).
Lemma vectorize_def {A M N' : Type'} : (@vectorize A M N') = (fun x : cart (cart A N') M => @lambda A (finite_prod M N') (fun i : N => @dollar A N' (@dollar (cart A N') M x (N.add (NUMERAL (BIT1 0%N)) (N.div (N.sub i (NUMERAL (BIT1 0%N))) (@dimindex N' (@UNIV N'))))) (N.add (NUMERAL (BIT1 0%N)) (N.modulo (N.sub i (NUMERAL (BIT1 0%N))) (@dimindex N' (@UNIV N')))))).
Proof. exact (eq_refl (@vectorize A M N')). Qed.
Definition matrify {A M N' : Type'} : (cart A (finite_prod M N')) -> cart (cart A N') M := fun x : cart A (finite_prod M N') => @lambda (cart A N') M (fun i : N => @lambda A N' (fun j : N => @dollar A (finite_prod M N') x (N.add (N.mul (N.sub i (NUMERAL (BIT1 0%N))) (@dimindex N' (@UNIV N'))) j))).
Lemma matrify_def {A M N' : Type'} : (@matrify A M N') = (fun x : cart A (finite_prod M N') => @lambda (cart A N') M (fun i : N => @lambda A N' (fun j : N => @dollar A (finite_prod M N') x (N.add (N.mul (N.sub i (NUMERAL (BIT1 0%N))) (@dimindex N' (@UNIV N'))) j)))).
Proof. exact (eq_refl (@matrify A M N')). Qed.
Definition hull {_219255 : Type'} : ((_219255 -> Prop) -> Prop) -> (_219255 -> Prop) -> _219255 -> Prop := fun _272381 : (_219255 -> Prop) -> Prop => fun _272382 : _219255 -> Prop => @INTERS _219255 (@GSPEC (_219255 -> Prop) (fun GEN_PVAR_636 : _219255 -> Prop => exists t : _219255 -> Prop, @SETSPEC (_219255 -> Prop) GEN_PVAR_636 ((_272381 t) /\ (@SUBSET _219255 _272382 t)) t)).
Lemma hull_def {_219255 : Type'} : (@hull _219255) = (fun _272381 : (_219255 -> Prop) -> Prop => fun _272382 : _219255 -> Prop => @INTERS _219255 (@GSPEC (_219255 -> Prop) (fun GEN_PVAR_636 : _219255 -> Prop => exists t : _219255 -> Prop, @SETSPEC (_219255 -> Prop) GEN_PVAR_636 ((_272381 t) /\ (@SUBSET _219255 _272382 t)) t))).
Proof. exact (eq_refl (@hull _219255)). Qed.
Definition from : N -> N -> Prop := fun _273299 : N => @GSPEC N (fun GEN_PVAR_641 : N => exists m : N, @SETSPEC N GEN_PVAR_641 (N.le _273299 m) m).
Lemma from_def : from = (fun _273299 : N => @GSPEC N (fun GEN_PVAR_641 : N => exists m : N, @SETSPEC N GEN_PVAR_641 (N.le _273299 m) m)).
Proof. exact (eq_refl from). Qed.
Definition relative_to {_231294 : Type'} : ((_231294 -> Prop) -> Prop) -> (_231294 -> Prop) -> (_231294 -> Prop) -> Prop := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> ((_231294 -> Prop) -> Prop) -> (_231294 -> Prop) -> (_231294 -> Prop) -> Prop) (fun relative_to' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> ((_231294 -> Prop) -> Prop) -> (_231294 -> Prop) -> (_231294 -> Prop) -> Prop => forall _276925 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))), forall P : (_231294 -> Prop) -> Prop, forall s : _231294 -> Prop, forall t : _231294 -> Prop, (relative_to' _276925 P s t) = (exists u : _231294 -> Prop, (P u) /\ ((@INTER _231294 s u) = t))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))))))))))))).
Lemma relative_to_def {_231294 : Type'} : (@relative_to _231294) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> ((_231294 -> Prop) -> Prop) -> (_231294 -> Prop) -> (_231294 -> Prop) -> Prop) (fun relative_to' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> ((_231294 -> Prop) -> Prop) -> (_231294 -> Prop) -> (_231294 -> Prop) -> Prop => forall _276925 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))), forall P : (_231294 -> Prop) -> Prop, forall s : _231294 -> Prop, forall t : _231294 -> Prop, (relative_to' _276925 P s t) = (exists u : _231294 -> Prop, (P u) /\ ((@INTER _231294 s u) = t))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N))))))))))))))))))).
Proof. exact (eq_refl (@relative_to _231294)). Qed.
Definition suslin_operation {A : Type'} : ((list N) -> A -> Prop) -> A -> Prop := fun _305416 : (list N) -> A -> Prop => @UNIONS A (@GSPEC (A -> Prop) (fun GEN_PVAR_682 : A -> Prop => exists s : N -> N, @SETSPEC (A -> Prop) GEN_PVAR_682 (@IN (N -> N) s (@UNIV (N -> N))) (@INTERS A (@GSPEC (A -> Prop) (fun GEN_PVAR_681 : A -> Prop => exists n : N, @SETSPEC (A -> Prop) GEN_PVAR_681 (N.le (NUMERAL (BIT1 0%N)) n) (_305416 (@list_of_seq N s n))))))).
Lemma suslin_operation_def {A : Type'} : (@suslin_operation A) = (fun _305416 : (list N) -> A -> Prop => @UNIONS A (@GSPEC (A -> Prop) (fun GEN_PVAR_682 : A -> Prop => exists s : N -> N, @SETSPEC (A -> Prop) GEN_PVAR_682 (@IN (N -> N) s (@UNIV (N -> N))) (@INTERS A (@GSPEC (A -> Prop) (fun GEN_PVAR_681 : A -> Prop => exists n : N, @SETSPEC (A -> Prop) GEN_PVAR_681 (N.le (NUMERAL (BIT1 0%N)) n) (_305416 (@list_of_seq N s n)))))))).
Proof. exact (eq_refl (@suslin_operation A)). Qed.
Definition suslin {_235636 : Type'} : ((_235636 -> Prop) -> Prop) -> (_235636 -> Prop) -> Prop := fun _305421 : (_235636 -> Prop) -> Prop => @GSPEC (_235636 -> Prop) (fun GEN_PVAR_683 : _235636 -> Prop => exists f : (list N) -> _235636 -> Prop, @SETSPEC (_235636 -> Prop) GEN_PVAR_683 (forall l : list N, (~ (l = (@nil N))) -> @IN (_235636 -> Prop) (f l) _305421) (@suslin_operation _235636 f)).
Lemma suslin_def {_235636 : Type'} : (@suslin _235636) = (fun _305421 : (_235636 -> Prop) -> Prop => @GSPEC (_235636 -> Prop) (fun GEN_PVAR_683 : _235636 -> Prop => exists f : (list N) -> _235636 -> Prop, @SETSPEC (_235636 -> Prop) GEN_PVAR_683 (forall l : list N, (~ (l = (@nil N))) -> @IN (_235636 -> Prop) (f l) _305421) (@suslin_operation _235636 f))).
Proof. exact (eq_refl (@suslin _235636)). Qed.
Definition ITER {_237857 : Type'} : N -> (_237857 -> _237857) -> _237857 -> _237857 := @ε ((prod N (prod N (prod N N))) -> N -> (_237857 -> _237857) -> _237857 -> _237857) (fun ITER' : (prod N (prod N (prod N N))) -> N -> (_237857 -> _237857) -> _237857 -> _237857 => forall _337618 : prod N (prod N (prod N N)), (forall x : _237857, forall f : _237857 -> _237857, (ITER' _337618 (NUMERAL 0%N) f x) = x) /\ (forall x : _237857, forall f : _237857 -> _237857, forall n : N, (ITER' _337618 (N.succ n) f x) = (f (ITER' _337618 n f x)))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N))))))))))).
Lemma ITER_def {_237857 : Type'} : (@ITER _237857) = (@ε ((prod N (prod N (prod N N))) -> N -> (_237857 -> _237857) -> _237857 -> _237857) (fun ITER' : (prod N (prod N (prod N N))) -> N -> (_237857 -> _237857) -> _237857 -> _237857 => forall _337618 : prod N (prod N (prod N N)), (forall x : _237857, forall f : _237857 -> _237857, (ITER' _337618 (NUMERAL 0%N) f x) = x) /\ (forall x : _237857, forall f : _237857 -> _237857, forall n : N, (ITER' _337618 (N.succ n) f x) = (f (ITER' _337618 n f x)))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 0%N)))))))))))).
Proof. exact (eq_refl (@ITER _237857)). Qed.
Definition frag_support {A : Type'} : (frag A) -> A -> Prop := fun _338801 : frag A => @GSPEC A (fun GEN_PVAR_710 : A => exists a : A, @SETSPEC A GEN_PVAR_710 (~ ((@dest_frag A _338801 a) = (Z_of_N (NUMERAL 0%N)))) a).
Lemma frag_support_def {A : Type'} : (@frag_support A) = (fun _338801 : frag A => @GSPEC A (fun GEN_PVAR_710 : A => exists a : A, @SETSPEC A GEN_PVAR_710 (~ ((@dest_frag A _338801 a) = (Z_of_N (NUMERAL 0%N)))) a)).
Proof. exact (eq_refl (@frag_support A)). Qed.
Definition frag_0 {A : Type'} : frag A := @mk_frag A (fun x : A => Z_of_N (NUMERAL 0%N)).
Lemma frag_0_def {A : Type'} : (@frag_0 A) = (@mk_frag A (fun x : A => Z_of_N (NUMERAL 0%N))).
Proof. exact (eq_refl (@frag_0 A)). Qed.
Definition frag_of {A : Type'} : A -> frag A := fun _338806 : A => @mk_frag A (fun a : A => @COND Z (a = _338806) (Z_of_N (NUMERAL (BIT1 0%N))) (Z_of_N (NUMERAL 0%N))).
Lemma frag_of_def {A : Type'} : (@frag_of A) = (fun _338806 : A => @mk_frag A (fun a : A => @COND Z (a = _338806) (Z_of_N (NUMERAL (BIT1 0%N))) (Z_of_N (NUMERAL 0%N)))).
Proof. exact (eq_refl (@frag_of A)). Qed.
Definition frag_neg {A : Type'} : (frag A) -> frag A := fun _338811 : frag A => @mk_frag A (fun a : A => int_neg (@dest_frag A _338811 a)).
Lemma frag_neg_def {A : Type'} : (@frag_neg A) = (fun _338811 : frag A => @mk_frag A (fun a : A => int_neg (@dest_frag A _338811 a))).
Proof. exact (eq_refl (@frag_neg A)). Qed.
Definition frag_cmul {A : Type'} : Z -> (frag A) -> frag A := fun _338816 : Z => fun _338817 : frag A => @mk_frag A (fun a : A => int_mul _338816 (@dest_frag A _338817 a)).
Lemma frag_cmul_def {A : Type'} : (@frag_cmul A) = (fun _338816 : Z => fun _338817 : frag A => @mk_frag A (fun a : A => int_mul _338816 (@dest_frag A _338817 a))).
Proof. exact (eq_refl (@frag_cmul A)). Qed.
Definition frag_add {A : Type'} : (frag A) -> (frag A) -> frag A := fun _338828 : frag A => fun _338829 : frag A => @mk_frag A (fun a : A => int_add (@dest_frag A _338828 a) (@dest_frag A _338829 a)).
Lemma frag_add_def {A : Type'} : (@frag_add A) = (fun _338828 : frag A => fun _338829 : frag A => @mk_frag A (fun a : A => int_add (@dest_frag A _338828 a) (@dest_frag A _338829 a))).
Proof. exact (eq_refl (@frag_add A)). Qed.
Definition frag_sub {A : Type'} : (frag A) -> (frag A) -> frag A := fun _338840 : frag A => fun _338841 : frag A => @mk_frag A (fun a : A => int_sub (@dest_frag A _338840 a) (@dest_frag A _338841 a)).
Lemma frag_sub_def {A : Type'} : (@frag_sub A) = (fun _338840 : frag A => fun _338841 : frag A => @mk_frag A (fun a : A => int_sub (@dest_frag A _338840 a) (@dest_frag A _338841 a))).
Proof. exact (eq_refl (@frag_sub A)). Qed.
Definition frag_extend {A B : Type'} : (A -> frag B) -> (frag A) -> frag B := fun _339446 : A -> frag B => fun _339447 : frag A => @iterate A (frag B) (@frag_add B) (@frag_support A _339447) (fun a : A => @frag_cmul B (@dest_frag A _339447 a) (_339446 a)).
Lemma frag_extend_def {A B : Type'} : (@frag_extend A B) = (fun _339446 : A -> frag B => fun _339447 : frag A => @iterate A (frag B) (@frag_add B) (@frag_support A _339447) (fun a : A => @frag_cmul B (@dest_frag A _339447 a) (_339446 a))).
Proof. exact (eq_refl (@frag_extend A B)). Qed.
Definition index : N -> N -> N := fun _346634 : N => fun _346635 : N => @COND N ((N.le _346634 (NUMERAL (BIT1 0%N))) \/ (_346635 = (NUMERAL 0%N))) (NUMERAL 0%N) (@CARD N (@GSPEC N (fun GEN_PVAR_729 : N => exists j : N, @SETSPEC N GEN_PVAR_729 ((N.le (NUMERAL (BIT1 0%N)) j) /\ (num_divides (N.pow _346634 j) _346635)) j))).
Lemma index_def : index = (fun _346634 : N => fun _346635 : N => @COND N ((N.le _346634 (NUMERAL (BIT1 0%N))) \/ (_346635 = (NUMERAL 0%N))) (NUMERAL 0%N) (@CARD N (@GSPEC N (fun GEN_PVAR_729 : N => exists j : N, @SETSPEC N GEN_PVAR_729 ((N.le (NUMERAL (BIT1 0%N)) j) /\ (num_divides (N.pow _346634 j) _346635)) j)))).
Proof. exact (eq_refl index). Qed.
Definition group_carrier {A : Type'} : (Group A) -> A -> Prop := fun g : Group A => @fst (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@group_operations A g).
Lemma group_carrier_def {A : Type'} : (@group_carrier A) = (fun g : Group A => @fst (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@group_operations A g)).
Proof. exact (eq_refl (@group_carrier A)). Qed.
Definition group_id {A : Type'} : (Group A) -> A := fun g : Group A => @fst A (prod (A -> A) (A -> A -> A)) (@snd (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@group_operations A g)).
Lemma group_id_def {A : Type'} : (@group_id A) = (fun g : Group A => @fst A (prod (A -> A) (A -> A -> A)) (@snd (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@group_operations A g))).
Proof. exact (eq_refl (@group_id A)). Qed.
Definition group_inv {A : Type'} : (Group A) -> A -> A := fun g : Group A => @fst (A -> A) (A -> A -> A) (@snd A (prod (A -> A) (A -> A -> A)) (@snd (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@group_operations A g))).
Lemma group_inv_def {A : Type'} : (@group_inv A) = (fun g : Group A => @fst (A -> A) (A -> A -> A) (@snd A (prod (A -> A) (A -> A -> A)) (@snd (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@group_operations A g)))).
Proof. exact (eq_refl (@group_inv A)). Qed.
Definition group_mul {A : Type'} : (Group A) -> A -> A -> A := fun g : Group A => @snd (A -> A) (A -> A -> A) (@snd A (prod (A -> A) (A -> A -> A)) (@snd (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@group_operations A g))).
Lemma group_mul_def {A : Type'} : (@group_mul A) = (fun g : Group A => @snd (A -> A) (A -> A -> A) (@snd A (prod (A -> A) (A -> A -> A)) (@snd (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@group_operations A g)))).
Proof. exact (eq_refl (@group_mul A)). Qed.
Definition singleton_group {A : Type'} : A -> Group A := fun _354213 : A => @group A (@pair (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@INSERT A _354213 (@EMPTY A)) (@pair A (prod (A -> A) (A -> A -> A)) _354213 (@pair (A -> A) (A -> A -> A) (fun x : A => _354213) (fun x : A => fun y : A => _354213)))).
Lemma singleton_group_def {A : Type'} : (@singleton_group A) = (fun _354213 : A => @group A (@pair (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@INSERT A _354213 (@EMPTY A)) (@pair A (prod (A -> A) (A -> A -> A)) _354213 (@pair (A -> A) (A -> A -> A) (fun x : A => _354213) (fun x : A => fun y : A => _354213))))).
Proof. exact (eq_refl (@singleton_group A)). Qed.
Definition trivial_group {_255474 : Type'} : (Group _255474) -> Prop := fun _354218 : Group _255474 => (@group_carrier _255474 _354218) = (@INSERT _255474 (@group_id _255474 _354218) (@EMPTY _255474)).
Lemma trivial_group_def {_255474 : Type'} : (@trivial_group _255474) = (fun _354218 : Group _255474 => (@group_carrier _255474 _354218) = (@INSERT _255474 (@group_id _255474 _354218) (@EMPTY _255474))).
Proof. exact (eq_refl (@trivial_group _255474)). Qed.
Definition opposite_group {A : Type'} : (Group A) -> Group A := fun _354284 : Group A => @group A (@pair (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@group_carrier A _354284) (@pair A (prod (A -> A) (A -> A -> A)) (@group_id A _354284) (@pair (A -> A) (A -> A -> A) (@group_inv A _354284) (fun x : A => fun y : A => @group_mul A _354284 y x)))).
Lemma opposite_group_def {A : Type'} : (@opposite_group A) = (fun _354284 : Group A => @group A (@pair (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@group_carrier A _354284) (@pair A (prod (A -> A) (A -> A -> A)) (@group_id A _354284) (@pair (A -> A) (A -> A -> A) (@group_inv A _354284) (fun x : A => fun y : A => @group_mul A _354284 y x))))).
Proof. exact (eq_refl (@opposite_group A)). Qed.
Definition group_div {_255847 : Type'} : (Group _255847) -> _255847 -> _255847 -> _255847 := fun _354289 : Group _255847 => fun _354290 : _255847 => fun _354291 : _255847 => @group_mul _255847 _354289 _354290 (@group_inv _255847 _354289 _354291).
Lemma group_div_def {_255847 : Type'} : (@group_div _255847) = (fun _354289 : Group _255847 => fun _354290 : _255847 => fun _354291 : _255847 => @group_mul _255847 _354289 _354290 (@group_inv _255847 _354289 _354291)).
Proof. exact (eq_refl (@group_div _255847)). Qed.
Definition group_pow {_257039 : Type'} : (Group _257039) -> _257039 -> N -> _257039 := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) -> (Group _257039) -> _257039 -> N -> _257039) (fun group_pow' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) -> (Group _257039) -> _257039 -> N -> _257039 => forall _354924 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))), (forall x : _257039, forall G : Group _257039, (group_pow' _354924 G x (NUMERAL 0%N)) = (@group_id _257039 G)) /\ (forall G : Group _257039, forall x : _257039, forall n : N, (group_pow' _354924 G x (N.succ n)) = (@group_mul _257039 G x (group_pow' _354924 G x n)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))))))))))).
Lemma group_pow_def {_257039 : Type'} : (@group_pow _257039) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) -> (Group _257039) -> _257039 -> N -> _257039) (fun group_pow' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) -> (Group _257039) -> _257039 -> N -> _257039 => forall _354924 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))), (forall x : _257039, forall G : Group _257039, (group_pow' _354924 G x (NUMERAL 0%N)) = (@group_id _257039 G)) /\ (forall G : Group _257039, forall x : _257039, forall n : N, (group_pow' _354924 G x (N.succ n)) = (@group_mul _257039 G x (group_pow' _354924 G x n)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N))))))))))))))))).
Proof. exact (eq_refl (@group_pow _257039)). Qed.
Definition group_zpow {A : Type'} : (Group A) -> A -> Z -> A := fun _354984 : Group A => fun _354985 : A => fun _354986 : Z => @COND A (int_le (Z_of_N (NUMERAL 0%N)) _354986) (@group_pow A _354984 _354985 (num_of_int _354986)) (@group_inv A _354984 (@group_pow A _354984 _354985 (num_of_int (int_neg _354986)))).
Lemma group_zpow_def {A : Type'} : (@group_zpow A) = (fun _354984 : Group A => fun _354985 : A => fun _354986 : Z => @COND A (int_le (Z_of_N (NUMERAL 0%N)) _354986) (@group_pow A _354984 _354985 (num_of_int _354986)) (@group_inv A _354984 (@group_pow A _354984 _354985 (num_of_int (int_neg _354986))))).
Proof. exact (eq_refl (@group_zpow A)). Qed.
Definition abelian_group {A : Type'} : (Group A) -> Prop := fun _355172 : Group A => forall x : A, forall y : A, ((@IN A x (@group_carrier A _355172)) /\ (@IN A y (@group_carrier A _355172))) -> (@group_mul A _355172 x y) = (@group_mul A _355172 y x).
Lemma abelian_group_def {A : Type'} : (@abelian_group A) = (fun _355172 : Group A => forall x : A, forall y : A, ((@IN A x (@group_carrier A _355172)) /\ (@IN A y (@group_carrier A _355172))) -> (@group_mul A _355172 x y) = (@group_mul A _355172 y x)).
Proof. exact (eq_refl (@abelian_group A)). Qed.
Definition group_neg {_258875 : Type'} : (Group _258875) -> _258875 -> _258875 := fun _355389 : Group _258875 => fun _355390 : _258875 => @COND _258875 (@IN _258875 _355390 (@group_carrier _258875 _355389)) (@group_inv _258875 _355389 _355390) _355390.
Lemma group_neg_def {_258875 : Type'} : (@group_neg _258875) = (fun _355389 : Group _258875 => fun _355390 : _258875 => @COND _258875 (@IN _258875 _355390 (@group_carrier _258875 _355389)) (@group_inv _258875 _355389 _355390) _355390).
Proof. exact (eq_refl (@group_neg _258875)). Qed.
Definition group_add {A : Type'} : (Group A) -> A -> A -> A := fun _355401 : Group A => fun _355402 : A => fun _355403 : A => @COND A ((@IN A _355402 (@group_carrier A _355401)) /\ (@IN A _355403 (@group_carrier A _355401))) (@group_mul A _355401 _355402 _355403) (@COND A (@IN A _355402 (@group_carrier A _355401)) _355403 (@COND A (@IN A _355403 (@group_carrier A _355401)) _355402 (@ε A (fun w : A => ~ (@IN A w (@group_carrier A _355401)))))).
Lemma group_add_def {A : Type'} : (@group_add A) = (fun _355401 : Group A => fun _355402 : A => fun _355403 : A => @COND A ((@IN A _355402 (@group_carrier A _355401)) /\ (@IN A _355403 (@group_carrier A _355401))) (@group_mul A _355401 _355402 _355403) (@COND A (@IN A _355402 (@group_carrier A _355401)) _355403 (@COND A (@IN A _355403 (@group_carrier A _355401)) _355402 (@ε A (fun w : A => ~ (@IN A w (@group_carrier A _355401))))))).
Proof. exact (eq_refl (@group_add A)). Qed.
Definition group_nmul {_258956 : Type'} : (Group _258956) -> N -> _258956 -> _258956 := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) -> (Group _258956) -> N -> _258956 -> _258956) (fun group_nmul' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) -> (Group _258956) -> N -> _258956 -> _258956 => forall _355429 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))), (forall x : _258956, forall G : Group _258956, (group_nmul' _355429 G (NUMERAL 0%N) x) = (@group_id _258956 G)) /\ (forall G : Group _258956, forall n : N, forall x : _258956, (group_nmul' _355429 G (N.succ n) x) = (@group_add _258956 G x (group_nmul' _355429 G n x)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N))))))))))))))))).
Lemma group_nmul_def {_258956 : Type'} : (@group_nmul _258956) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) -> (Group _258956) -> N -> _258956 -> _258956) (fun group_nmul' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) -> (Group _258956) -> N -> _258956 -> _258956 => forall _355429 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))), (forall x : _258956, forall G : Group _258956, (group_nmul' _355429 G (NUMERAL 0%N) x) = (@group_id _258956 G)) /\ (forall G : Group _258956, forall n : N, forall x : _258956, (group_nmul' _355429 G (N.succ n) x) = (@group_add _258956 G x (group_nmul' _355429 G n x)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))))))))))))).
Proof. exact (eq_refl (@group_nmul _258956)). Qed.
Definition group_product {_260068 A : Type'} : (Group A) -> (_260068 -> _260068 -> Prop) -> (_260068 -> Prop) -> (_260068 -> A) -> A := fun _355791 : Group A => @iterato A _260068 (@group_carrier A _355791) (@group_id A _355791) (@group_mul A _355791).
Lemma group_product_def {_260068 A : Type'} : (@group_product _260068 A) = (fun _355791 : Group A => @iterato A _260068 (@group_carrier A _355791) (@group_id A _355791) (@group_mul A _355791)).
Proof. exact (eq_refl (@group_product _260068 A)). Qed.
Definition group_sum {A K : Type'} : (Group A) -> (K -> Prop) -> (K -> A) -> A := fun _355796 : Group A => @group_product K A _355796 (@ε (K -> K -> Prop) (fun l : K -> K -> Prop => (@woset K l) /\ ((@fld K l) = (@UNIV K)))).
Lemma group_sum_def {A K : Type'} : (@group_sum A K) = (fun _355796 : Group A => @group_product K A _355796 (@ε (K -> K -> Prop) (fun l : K -> K -> Prop => (@woset K l) /\ ((@fld K l) = (@UNIV K))))).
Proof. exact (eq_refl (@group_sum A K)). Qed.
Definition group_conjugation {_265504 : Type'} : (Group _265504) -> _265504 -> _265504 -> _265504 := fun _371034 : Group _265504 => fun _371035 : _265504 => fun _371036 : _265504 => @group_mul _265504 _371034 _371035 (@group_mul _265504 _371034 _371036 (@group_inv _265504 _371034 _371035)).
Lemma group_conjugation_def {_265504 : Type'} : (@group_conjugation _265504) = (fun _371034 : Group _265504 => fun _371035 : _265504 => fun _371036 : _265504 => @group_mul _265504 _371034 _371035 (@group_mul _265504 _371034 _371036 (@group_inv _265504 _371034 _371035))).
Proof. exact (eq_refl (@group_conjugation _265504)). Qed.
Definition subgroup_of {A : Type'} : (A -> Prop) -> (Group A) -> Prop := fun _371742 : A -> Prop => fun _371743 : Group A => (@SUBSET A _371742 (@group_carrier A _371743)) /\ ((@IN A (@group_id A _371743) _371742) /\ ((forall x : A, (@IN A x _371742) -> @IN A (@group_inv A _371743 x) _371742) /\ (forall x : A, forall y : A, ((@IN A x _371742) /\ (@IN A y _371742)) -> @IN A (@group_mul A _371743 x y) _371742))).
Lemma subgroup_of_def {A : Type'} : (@subgroup_of A) = (fun _371742 : A -> Prop => fun _371743 : Group A => (@SUBSET A _371742 (@group_carrier A _371743)) /\ ((@IN A (@group_id A _371743) _371742) /\ ((forall x : A, (@IN A x _371742) -> @IN A (@group_inv A _371743 x) _371742) /\ (forall x : A, forall y : A, ((@IN A x _371742) /\ (@IN A y _371742)) -> @IN A (@group_mul A _371743 x y) _371742)))).
Proof. exact (eq_refl (@subgroup_of A)). Qed.
Definition subgroup_generated {A : Type'} : (Group A) -> (A -> Prop) -> Group A := fun _372584 : Group A => fun _372585 : A -> Prop => @group A (@pair (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@INTERS A (@GSPEC (A -> Prop) (fun GEN_PVAR_810 : A -> Prop => exists h : A -> Prop, @SETSPEC (A -> Prop) GEN_PVAR_810 ((@subgroup_of A h _372584) /\ (@SUBSET A (@INTER A (@group_carrier A _372584) _372585) h)) h))) (@pair A (prod (A -> A) (A -> A -> A)) (@group_id A _372584) (@pair (A -> A) (A -> A -> A) (@group_inv A _372584) (@group_mul A _372584)))).
Lemma subgroup_generated_def {A : Type'} : (@subgroup_generated A) = (fun _372584 : Group A => fun _372585 : A -> Prop => @group A (@pair (A -> Prop) (prod A (prod (A -> A) (A -> A -> A))) (@INTERS A (@GSPEC (A -> Prop) (fun GEN_PVAR_810 : A -> Prop => exists h : A -> Prop, @SETSPEC (A -> Prop) GEN_PVAR_810 ((@subgroup_of A h _372584) /\ (@SUBSET A (@INTER A (@group_carrier A _372584) _372585) h)) h))) (@pair A (prod (A -> A) (A -> A -> A)) (@group_id A _372584) (@pair (A -> A) (A -> A -> A) (@group_inv A _372584) (@group_mul A _372584))))).
Proof. exact (eq_refl (@subgroup_generated A)). Qed.
Definition prod_group {A B : Type'} : (Group A) -> (Group B) -> Group (prod A B) := fun _374544 : Group A => fun _374545 : Group B => @group (prod A B) (@pair ((prod A B) -> Prop) (prod (prod A B) (prod ((prod A B) -> prod A B) ((prod A B) -> (prod A B) -> prod A B))) (@CROSS A B (@group_carrier A _374544) (@group_carrier B _374545)) (@pair (prod A B) (prod ((prod A B) -> prod A B) ((prod A B) -> (prod A B) -> prod A B)) (@pair A B (@group_id A _374544) (@group_id B _374545)) (@pair ((prod A B) -> prod A B) ((prod A B) -> (prod A B) -> prod A B) (@GABS ((prod A B) -> prod A B) (fun f : (prod A B) -> prod A B => forall x : A, forall x' : B, @GEQ (prod A B) (f (@pair A B x x')) (@pair A B (@group_inv A _374544 x) (@group_inv B _374545 x')))) (@GABS ((prod A B) -> (prod A B) -> prod A B) (fun f : (prod A B) -> (prod A B) -> prod A B => forall x : A, forall x' : B, @GEQ ((prod A B) -> prod A B) (f (@pair A B x x')) (@GABS ((prod A B) -> prod A B) (fun f' : (prod A B) -> prod A B => forall y : A, forall y' : B, @GEQ (prod A B) (f' (@pair A B y y')) (@pair A B (@group_mul A _374544 x y) (@group_mul B _374545 x' y'))))))))).
Lemma prod_group_def {A B : Type'} : (@prod_group A B) = (fun _374544 : Group A => fun _374545 : Group B => @group (prod A B) (@pair ((prod A B) -> Prop) (prod (prod A B) (prod ((prod A B) -> prod A B) ((prod A B) -> (prod A B) -> prod A B))) (@CROSS A B (@group_carrier A _374544) (@group_carrier B _374545)) (@pair (prod A B) (prod ((prod A B) -> prod A B) ((prod A B) -> (prod A B) -> prod A B)) (@pair A B (@group_id A _374544) (@group_id B _374545)) (@pair ((prod A B) -> prod A B) ((prod A B) -> (prod A B) -> prod A B) (@GABS ((prod A B) -> prod A B) (fun f : (prod A B) -> prod A B => forall x : A, forall x' : B, @GEQ (prod A B) (f (@pair A B x x')) (@pair A B (@group_inv A _374544 x) (@group_inv B _374545 x')))) (@GABS ((prod A B) -> (prod A B) -> prod A B) (fun f : (prod A B) -> (prod A B) -> prod A B => forall x : A, forall x' : B, @GEQ ((prod A B) -> prod A B) (f (@pair A B x x')) (@GABS ((prod A B) -> prod A B) (fun f' : (prod A B) -> prod A B => forall y : A, forall y' : B, @GEQ (prod A B) (f' (@pair A B y y')) (@pair A B (@group_mul A _374544 x y) (@group_mul B _374545 x' y')))))))))).
Proof. exact (eq_refl (@prod_group A B)). Qed.
Definition product_group {A K : Type'} : (K -> Prop) -> (K -> Group A) -> Group (K -> A) := fun _375306 : K -> Prop => fun _375307 : K -> Group A => @group (K -> A) (@pair ((K -> A) -> Prop) (prod (K -> A) (prod ((K -> A) -> K -> A) ((K -> A) -> (K -> A) -> K -> A))) (@cartesian_product A K _375306 (fun i : K => @group_carrier A (_375307 i))) (@pair (K -> A) (prod ((K -> A) -> K -> A) ((K -> A) -> (K -> A) -> K -> A)) (@RESTRICTION K A _375306 (fun i : K => @group_id A (_375307 i))) (@pair ((K -> A) -> K -> A) ((K -> A) -> (K -> A) -> K -> A) (fun x : K -> A => @RESTRICTION K A _375306 (fun i : K => @group_inv A (_375307 i) (x i))) (fun x : K -> A => fun y : K -> A => @RESTRICTION K A _375306 (fun i : K => @group_mul A (_375307 i) (x i) (y i)))))).
Lemma product_group_def {A K : Type'} : (@product_group A K) = (fun _375306 : K -> Prop => fun _375307 : K -> Group A => @group (K -> A) (@pair ((K -> A) -> Prop) (prod (K -> A) (prod ((K -> A) -> K -> A) ((K -> A) -> (K -> A) -> K -> A))) (@cartesian_product A K _375306 (fun i : K => @group_carrier A (_375307 i))) (@pair (K -> A) (prod ((K -> A) -> K -> A) ((K -> A) -> (K -> A) -> K -> A)) (@RESTRICTION K A _375306 (fun i : K => @group_id A (_375307 i))) (@pair ((K -> A) -> K -> A) ((K -> A) -> (K -> A) -> K -> A) (fun x : K -> A => @RESTRICTION K A _375306 (fun i : K => @group_inv A (_375307 i) (x i))) (fun x : K -> A => fun y : K -> A => @RESTRICTION K A _375306 (fun i : K => @group_mul A (_375307 i) (x i) (y i))))))).
Proof. exact (eq_refl (@product_group A K)). Qed.
Definition sum_group {A K : Type'} : (K -> Prop) -> (K -> Group A) -> Group (K -> A) := fun _375648 : K -> Prop => fun _375649 : K -> Group A => @subgroup_generated (K -> A) (@product_group A K _375648 _375649) (@GSPEC (K -> A) (fun GEN_PVAR_820 : K -> A => exists x : K -> A, @SETSPEC (K -> A) GEN_PVAR_820 ((@IN (K -> A) x (@cartesian_product A K _375648 (fun i : K => @group_carrier A (_375649 i)))) /\ (@FINITE K (@GSPEC K (fun GEN_PVAR_819 : K => exists i : K, @SETSPEC K GEN_PVAR_819 ((@IN K i _375648) /\ (~ ((x i) = (@group_id A (_375649 i))))) i)))) x)).
Lemma sum_group_def {A K : Type'} : (@sum_group A K) = (fun _375648 : K -> Prop => fun _375649 : K -> Group A => @subgroup_generated (K -> A) (@product_group A K _375648 _375649) (@GSPEC (K -> A) (fun GEN_PVAR_820 : K -> A => exists x : K -> A, @SETSPEC (K -> A) GEN_PVAR_820 ((@IN (K -> A) x (@cartesian_product A K _375648 (fun i : K => @group_carrier A (_375649 i)))) /\ (@FINITE K (@GSPEC K (fun GEN_PVAR_819 : K => exists i : K, @SETSPEC K GEN_PVAR_819 ((@IN K i _375648) /\ (~ ((x i) = (@group_id A (_375649 i))))) i)))) x))).
Proof. exact (eq_refl (@sum_group A K)). Qed.
Definition group_homomorphism {A B : Type'} : (prod (Group A) (Group B)) -> (A -> B) -> Prop := fun _376175 : prod (Group A) (Group B) => fun _376176 : A -> B => (@SUBSET B (@IMAGE A B _376176 (@group_carrier A (@fst (Group A) (Group B) _376175))) (@group_carrier B (@snd (Group A) (Group B) _376175))) /\ (((_376176 (@group_id A (@fst (Group A) (Group B) _376175))) = (@group_id B (@snd (Group A) (Group B) _376175))) /\ ((forall x : A, (@IN A x (@group_carrier A (@fst (Group A) (Group B) _376175))) -> (_376176 (@group_inv A (@fst (Group A) (Group B) _376175) x)) = (@group_inv B (@snd (Group A) (Group B) _376175) (_376176 x))) /\ (forall x : A, forall y : A, ((@IN A x (@group_carrier A (@fst (Group A) (Group B) _376175))) /\ (@IN A y (@group_carrier A (@fst (Group A) (Group B) _376175)))) -> (_376176 (@group_mul A (@fst (Group A) (Group B) _376175) x y)) = (@group_mul B (@snd (Group A) (Group B) _376175) (_376176 x) (_376176 y))))).
Lemma group_homomorphism_def {A B : Type'} : (@group_homomorphism A B) = (fun _376175 : prod (Group A) (Group B) => fun _376176 : A -> B => (@SUBSET B (@IMAGE A B _376176 (@group_carrier A (@fst (Group A) (Group B) _376175))) (@group_carrier B (@snd (Group A) (Group B) _376175))) /\ (((_376176 (@group_id A (@fst (Group A) (Group B) _376175))) = (@group_id B (@snd (Group A) (Group B) _376175))) /\ ((forall x : A, (@IN A x (@group_carrier A (@fst (Group A) (Group B) _376175))) -> (_376176 (@group_inv A (@fst (Group A) (Group B) _376175) x)) = (@group_inv B (@snd (Group A) (Group B) _376175) (_376176 x))) /\ (forall x : A, forall y : A, ((@IN A x (@group_carrier A (@fst (Group A) (Group B) _376175))) /\ (@IN A y (@group_carrier A (@fst (Group A) (Group B) _376175)))) -> (_376176 (@group_mul A (@fst (Group A) (Group B) _376175) x y)) = (@group_mul B (@snd (Group A) (Group B) _376175) (_376176 x) (_376176 y)))))).
Proof. exact (eq_refl (@group_homomorphism A B)). Qed.
Definition group_monomorphism {A B : Type'} : (prod (Group A) (Group B)) -> (A -> B) -> Prop := fun _376192 : prod (Group A) (Group B) => fun _376193 : A -> B => (@group_homomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (Group B) _376192) (@snd (Group A) (Group B) _376192)) _376193) /\ (forall x : A, forall y : A, ((@IN A x (@group_carrier A (@fst (Group A) (Group B) _376192))) /\ ((@IN A y (@group_carrier A (@fst (Group A) (Group B) _376192))) /\ ((_376193 x) = (_376193 y)))) -> x = y).
Lemma group_monomorphism_def {A B : Type'} : (@group_monomorphism A B) = (fun _376192 : prod (Group A) (Group B) => fun _376193 : A -> B => (@group_homomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (Group B) _376192) (@snd (Group A) (Group B) _376192)) _376193) /\ (forall x : A, forall y : A, ((@IN A x (@group_carrier A (@fst (Group A) (Group B) _376192))) /\ ((@IN A y (@group_carrier A (@fst (Group A) (Group B) _376192))) /\ ((_376193 x) = (_376193 y)))) -> x = y)).
Proof. exact (eq_refl (@group_monomorphism A B)). Qed.
Definition group_epimorphism {A B : Type'} : (prod (Group A) (Group B)) -> (A -> B) -> Prop := fun _376209 : prod (Group A) (Group B) => fun _376210 : A -> B => (@group_homomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (Group B) _376209) (@snd (Group A) (Group B) _376209)) _376210) /\ ((@IMAGE A B _376210 (@group_carrier A (@fst (Group A) (Group B) _376209))) = (@group_carrier B (@snd (Group A) (Group B) _376209))).
Lemma group_epimorphism_def {A B : Type'} : (@group_epimorphism A B) = (fun _376209 : prod (Group A) (Group B) => fun _376210 : A -> B => (@group_homomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (Group B) _376209) (@snd (Group A) (Group B) _376209)) _376210) /\ ((@IMAGE A B _376210 (@group_carrier A (@fst (Group A) (Group B) _376209))) = (@group_carrier B (@snd (Group A) (Group B) _376209)))).
Proof. exact (eq_refl (@group_epimorphism A B)). Qed.
Definition group_endomorphism {A : Type'} : (Group A) -> (A -> A) -> Prop := fun _376226 : Group A => fun _376227 : A -> A => @group_homomorphism A A (@pair (Group A) (Group A) _376226 _376226) _376227.
Lemma group_endomorphism_def {A : Type'} : (@group_endomorphism A) = (fun _376226 : Group A => fun _376227 : A -> A => @group_homomorphism A A (@pair (Group A) (Group A) _376226 _376226) _376227).
Proof. exact (eq_refl (@group_endomorphism A)). Qed.
Definition group_isomorphisms {A B : Type'} : (prod (Group A) (Group B)) -> (prod (A -> B) (B -> A)) -> Prop := fun _376238 : prod (Group A) (Group B) => fun _376239 : prod (A -> B) (B -> A) => (@group_homomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (Group B) _376238) (@snd (Group A) (Group B) _376238)) (@fst (A -> B) (B -> A) _376239)) /\ ((@group_homomorphism B A (@pair (Group B) (Group A) (@snd (Group A) (Group B) _376238) (@fst (Group A) (Group B) _376238)) (@snd (A -> B) (B -> A) _376239)) /\ ((forall x : A, (@IN A x (@group_carrier A (@fst (Group A) (Group B) _376238))) -> (@snd (A -> B) (B -> A) _376239 (@fst (A -> B) (B -> A) _376239 x)) = x) /\ (forall y : B, (@IN B y (@group_carrier B (@snd (Group A) (Group B) _376238))) -> (@fst (A -> B) (B -> A) _376239 (@snd (A -> B) (B -> A) _376239 y)) = y))).
Lemma group_isomorphisms_def {A B : Type'} : (@group_isomorphisms A B) = (fun _376238 : prod (Group A) (Group B) => fun _376239 : prod (A -> B) (B -> A) => (@group_homomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (Group B) _376238) (@snd (Group A) (Group B) _376238)) (@fst (A -> B) (B -> A) _376239)) /\ ((@group_homomorphism B A (@pair (Group B) (Group A) (@snd (Group A) (Group B) _376238) (@fst (Group A) (Group B) _376238)) (@snd (A -> B) (B -> A) _376239)) /\ ((forall x : A, (@IN A x (@group_carrier A (@fst (Group A) (Group B) _376238))) -> (@snd (A -> B) (B -> A) _376239 (@fst (A -> B) (B -> A) _376239 x)) = x) /\ (forall y : B, (@IN B y (@group_carrier B (@snd (Group A) (Group B) _376238))) -> (@fst (A -> B) (B -> A) _376239 (@snd (A -> B) (B -> A) _376239 y)) = y)))).
Proof. exact (eq_refl (@group_isomorphisms A B)). Qed.
Definition group_isomorphism {A B : Type'} : (prod (Group A) (Group B)) -> (A -> B) -> Prop := fun _376260 : prod (Group A) (Group B) => fun _376261 : A -> B => exists g : B -> A, @group_isomorphisms A B (@pair (Group A) (Group B) (@fst (Group A) (Group B) _376260) (@snd (Group A) (Group B) _376260)) (@pair (A -> B) (B -> A) _376261 g).
Lemma group_isomorphism_def {A B : Type'} : (@group_isomorphism A B) = (fun _376260 : prod (Group A) (Group B) => fun _376261 : A -> B => exists g : B -> A, @group_isomorphisms A B (@pair (Group A) (Group B) (@fst (Group A) (Group B) _376260) (@snd (Group A) (Group B) _376260)) (@pair (A -> B) (B -> A) _376261 g)).
Proof. exact (eq_refl (@group_isomorphism A B)). Qed.
Definition group_automorphism {A : Type'} : (Group A) -> (A -> A) -> Prop := fun _376277 : Group A => fun _376278 : A -> A => @group_isomorphism A A (@pair (Group A) (Group A) _376277 _376277) _376278.
Lemma group_automorphism_def {A : Type'} : (@group_automorphism A) = (fun _376277 : Group A => fun _376278 : A -> A => @group_isomorphism A A (@pair (Group A) (Group A) _376277 _376277) _376278).
Proof. exact (eq_refl (@group_automorphism A)). Qed.
Definition isomorphic_group {A B : Type'} : (Group A) -> (Group B) -> Prop := fun _399100 : Group A => fun _399101 : Group B => exists f : A -> B, @group_isomorphism A B (@pair (Group A) (Group B) _399100 _399101) f.
Lemma isomorphic_group_def {A B : Type'} : (@isomorphic_group A B) = (fun _399100 : Group A => fun _399101 : Group B => exists f : A -> B, @group_isomorphism A B (@pair (Group A) (Group B) _399100 _399101) f).
Proof. exact (eq_refl (@isomorphic_group A B)). Qed.
Definition group_setinv {_281127 : Type'} : (Group _281127) -> (_281127 -> Prop) -> _281127 -> Prop := fun _403173 : Group _281127 => fun _403174 : _281127 -> Prop => @GSPEC _281127 (fun GEN_PVAR_842 : _281127 => exists x : _281127, @SETSPEC _281127 GEN_PVAR_842 (@IN _281127 x _403174) (@group_inv _281127 _403173 x)).
Lemma group_setinv_def {_281127 : Type'} : (@group_setinv _281127) = (fun _403173 : Group _281127 => fun _403174 : _281127 -> Prop => @GSPEC _281127 (fun GEN_PVAR_842 : _281127 => exists x : _281127, @SETSPEC _281127 GEN_PVAR_842 (@IN _281127 x _403174) (@group_inv _281127 _403173 x))).
Proof. exact (eq_refl (@group_setinv _281127)). Qed.
Definition group_setmul {_281156 : Type'} : (Group _281156) -> (_281156 -> Prop) -> (_281156 -> Prop) -> _281156 -> Prop := fun _403185 : Group _281156 => fun _403186 : _281156 -> Prop => fun _403187 : _281156 -> Prop => @GSPEC _281156 (fun GEN_PVAR_843 : _281156 => exists x : _281156, exists y : _281156, @SETSPEC _281156 GEN_PVAR_843 ((@IN _281156 x _403186) /\ (@IN _281156 y _403187)) (@group_mul _281156 _403185 x y)).
Lemma group_setmul_def {_281156 : Type'} : (@group_setmul _281156) = (fun _403185 : Group _281156 => fun _403186 : _281156 -> Prop => fun _403187 : _281156 -> Prop => @GSPEC _281156 (fun GEN_PVAR_843 : _281156 => exists x : _281156, exists y : _281156, @SETSPEC _281156 GEN_PVAR_843 ((@IN _281156 x _403186) /\ (@IN _281156 y _403187)) (@group_mul _281156 _403185 x y))).
Proof. exact (eq_refl (@group_setmul _281156)). Qed.
Definition group_action {A X : Type'} : (Group A) -> (X -> Prop) -> (A -> X -> X) -> Prop := fun _405403 : Group A => fun _405404 : X -> Prop => fun _405405 : A -> X -> X => (forall g : A, forall x : X, ((@IN A g (@group_carrier A _405403)) /\ (@IN X x _405404)) -> @IN X (_405405 g x) _405404) /\ ((forall x : X, (@IN X x _405404) -> (_405405 (@group_id A _405403) x) = x) /\ (forall g : A, forall h : A, forall x : X, ((@IN A g (@group_carrier A _405403)) /\ ((@IN A h (@group_carrier A _405403)) /\ (@IN X x _405404))) -> (_405405 (@group_mul A _405403 g h) x) = (_405405 g (_405405 h x)))).
Lemma group_action_def {A X : Type'} : (@group_action A X) = (fun _405403 : Group A => fun _405404 : X -> Prop => fun _405405 : A -> X -> X => (forall g : A, forall x : X, ((@IN A g (@group_carrier A _405403)) /\ (@IN X x _405404)) -> @IN X (_405405 g x) _405404) /\ ((forall x : X, (@IN X x _405404) -> (_405405 (@group_id A _405403) x) = x) /\ (forall g : A, forall h : A, forall x : X, ((@IN A g (@group_carrier A _405403)) /\ ((@IN A h (@group_carrier A _405403)) /\ (@IN X x _405404))) -> (_405405 (@group_mul A _405403 g h) x) = (_405405 g (_405405 h x))))).
Proof. exact (eq_refl (@group_action A X)). Qed.
Definition group_stabilizer {A X : Type'} : (Group A) -> (A -> X -> X) -> X -> A -> Prop := fun _408336 : Group A => fun _408337 : A -> X -> X => fun _408338 : X => @GSPEC A (fun GEN_PVAR_855 : A => exists g : A, @SETSPEC A GEN_PVAR_855 ((@IN A g (@group_carrier A _408336)) /\ ((_408337 g _408338) = _408338)) g).
Lemma group_stabilizer_def {A X : Type'} : (@group_stabilizer A X) = (fun _408336 : Group A => fun _408337 : A -> X -> X => fun _408338 : X => @GSPEC A (fun GEN_PVAR_855 : A => exists g : A, @SETSPEC A GEN_PVAR_855 ((@IN A g (@group_carrier A _408336)) /\ ((_408337 g _408338) = _408338)) g)).
Proof. exact (eq_refl (@group_stabilizer A X)). Qed.
Definition group_orbit {A X : Type'} : (Group A) -> (X -> Prop) -> (A -> X -> X) -> X -> X -> Prop := fun _409004 : Group A => fun _409005 : X -> Prop => fun _409006 : A -> X -> X => fun _409007 : X => fun _409008 : X => (@IN X _409007 _409005) /\ ((@IN X _409008 _409005) /\ (exists g : A, (@IN A g (@group_carrier A _409004)) /\ ((_409006 g _409007) = _409008))).
Lemma group_orbit_def {A X : Type'} : (@group_orbit A X) = (fun _409004 : Group A => fun _409005 : X -> Prop => fun _409006 : A -> X -> X => fun _409007 : X => fun _409008 : X => (@IN X _409007 _409005) /\ ((@IN X _409008 _409005) /\ (exists g : A, (@IN A g (@group_carrier A _409004)) /\ ((_409006 g _409007) = _409008)))).
Proof. exact (eq_refl (@group_orbit A X)). Qed.
Definition right_coset {_287922 : Type'} : (Group _287922) -> (_287922 -> Prop) -> _287922 -> _287922 -> Prop := fun _414508 : Group _287922 => fun _414509 : _287922 -> Prop => fun _414510 : _287922 => @group_setmul _287922 _414508 _414509 (@INSERT _287922 _414510 (@EMPTY _287922)).
Lemma right_coset_def {_287922 : Type'} : (@right_coset _287922) = (fun _414508 : Group _287922 => fun _414509 : _287922 -> Prop => fun _414510 : _287922 => @group_setmul _287922 _414508 _414509 (@INSERT _287922 _414510 (@EMPTY _287922))).
Proof. exact (eq_refl (@right_coset _287922)). Qed.
Definition left_coset {_287937 : Type'} : (Group _287937) -> _287937 -> (_287937 -> Prop) -> _287937 -> Prop := fun _414529 : Group _287937 => fun _414530 : _287937 => fun _414531 : _287937 -> Prop => @group_setmul _287937 _414529 (@INSERT _287937 _414530 (@EMPTY _287937)) _414531.
Lemma left_coset_def {_287937 : Type'} : (@left_coset _287937) = (fun _414529 : Group _287937 => fun _414530 : _287937 => fun _414531 : _287937 -> Prop => @group_setmul _287937 _414529 (@INSERT _287937 _414530 (@EMPTY _287937)) _414531).
Proof. exact (eq_refl (@left_coset _287937)). Qed.
Definition normal_subgroup_of {A : Type'} : (A -> Prop) -> (Group A) -> Prop := fun _420191 : A -> Prop => fun _420192 : Group A => (@subgroup_of A _420191 _420192) /\ (forall x : A, (@IN A x (@group_carrier A _420192)) -> (@left_coset A _420192 x _420191) = (@right_coset A _420192 _420191 x)).
Lemma normal_subgroup_of_def {A : Type'} : (@normal_subgroup_of A) = (fun _420191 : A -> Prop => fun _420192 : Group A => (@subgroup_of A _420191 _420192) /\ (forall x : A, (@IN A x (@group_carrier A _420192)) -> (@left_coset A _420192 x _420191) = (@right_coset A _420192 _420191 x))).
Proof. exact (eq_refl (@normal_subgroup_of A)). Qed.
Definition group_conjugate {A : Type'} : (Group A) -> (A -> Prop) -> (A -> Prop) -> Prop := fun _422663 : Group A => fun _422664 : A -> Prop => fun _422665 : A -> Prop => (@SUBSET A _422664 (@group_carrier A _422663)) /\ ((@SUBSET A _422665 (@group_carrier A _422663)) /\ (exists a : A, (@IN A a (@group_carrier A _422663)) /\ ((@IMAGE A A (@group_conjugation A _422663 a) _422664) = _422665))).
Lemma group_conjugate_def {A : Type'} : (@group_conjugate A) = (fun _422663 : Group A => fun _422664 : A -> Prop => fun _422665 : A -> Prop => (@SUBSET A _422664 (@group_carrier A _422663)) /\ ((@SUBSET A _422665 (@group_carrier A _422663)) /\ (exists a : A, (@IN A a (@group_carrier A _422663)) /\ ((@IMAGE A A (@group_conjugation A _422663 a) _422664) = _422665)))).
Proof. exact (eq_refl (@group_conjugate A)). Qed.
Definition group_centralizer {A : Type'} : (Group A) -> (A -> Prop) -> A -> Prop := fun _423436 : Group A => fun _423437 : A -> Prop => @GSPEC A (fun GEN_PVAR_944 : A => exists x : A, @SETSPEC A GEN_PVAR_944 ((@IN A x (@group_carrier A _423436)) /\ (forall y : A, ((@IN A y (@group_carrier A _423436)) /\ (@IN A y _423437)) -> (@group_mul A _423436 x y) = (@group_mul A _423436 y x))) x).
Lemma group_centralizer_def {A : Type'} : (@group_centralizer A) = (fun _423436 : Group A => fun _423437 : A -> Prop => @GSPEC A (fun GEN_PVAR_944 : A => exists x : A, @SETSPEC A GEN_PVAR_944 ((@IN A x (@group_carrier A _423436)) /\ (forall y : A, ((@IN A y (@group_carrier A _423436)) /\ (@IN A y _423437)) -> (@group_mul A _423436 x y) = (@group_mul A _423436 y x))) x)).
Proof. exact (eq_refl (@group_centralizer A)). Qed.
Definition group_normalizer {A : Type'} : (Group A) -> (A -> Prop) -> A -> Prop := fun _423448 : Group A => fun _423449 : A -> Prop => @GSPEC A (fun GEN_PVAR_945 : A => exists x : A, @SETSPEC A GEN_PVAR_945 ((@IN A x (@group_carrier A _423448)) /\ ((@group_setmul A _423448 (@INSERT A x (@EMPTY A)) (@INTER A (@group_carrier A _423448) _423449)) = (@group_setmul A _423448 (@INTER A (@group_carrier A _423448) _423449) (@INSERT A x (@EMPTY A))))) x).
Lemma group_normalizer_def {A : Type'} : (@group_normalizer A) = (fun _423448 : Group A => fun _423449 : A -> Prop => @GSPEC A (fun GEN_PVAR_945 : A => exists x : A, @SETSPEC A GEN_PVAR_945 ((@IN A x (@group_carrier A _423448)) /\ ((@group_setmul A _423448 (@INSERT A x (@EMPTY A)) (@INTER A (@group_carrier A _423448) _423449)) = (@group_setmul A _423448 (@INTER A (@group_carrier A _423448) _423449) (@INSERT A x (@EMPTY A))))) x)).
Proof. exact (eq_refl (@group_normalizer A)). Qed.
Definition quotient_group {A : Type'} : (Group A) -> (A -> Prop) -> Group (A -> Prop) := fun _425519 : Group A => fun _425520 : A -> Prop => @group (A -> Prop) (@pair ((A -> Prop) -> Prop) (prod (A -> Prop) (prod ((A -> Prop) -> A -> Prop) ((A -> Prop) -> (A -> Prop) -> A -> Prop))) (@GSPEC (A -> Prop) (fun GEN_PVAR_963 : A -> Prop => exists x : A, @SETSPEC (A -> Prop) GEN_PVAR_963 (@IN A x (@group_carrier A _425519)) (@right_coset A _425519 _425520 x))) (@pair (A -> Prop) (prod ((A -> Prop) -> A -> Prop) ((A -> Prop) -> (A -> Prop) -> A -> Prop)) _425520 (@pair ((A -> Prop) -> A -> Prop) ((A -> Prop) -> (A -> Prop) -> A -> Prop) (@group_setinv A _425519) (@group_setmul A _425519)))).
Lemma quotient_group_def {A : Type'} : (@quotient_group A) = (fun _425519 : Group A => fun _425520 : A -> Prop => @group (A -> Prop) (@pair ((A -> Prop) -> Prop) (prod (A -> Prop) (prod ((A -> Prop) -> A -> Prop) ((A -> Prop) -> (A -> Prop) -> A -> Prop))) (@GSPEC (A -> Prop) (fun GEN_PVAR_963 : A -> Prop => exists x : A, @SETSPEC (A -> Prop) GEN_PVAR_963 (@IN A x (@group_carrier A _425519)) (@right_coset A _425519 _425520 x))) (@pair (A -> Prop) (prod ((A -> Prop) -> A -> Prop) ((A -> Prop) -> (A -> Prop) -> A -> Prop)) _425520 (@pair ((A -> Prop) -> A -> Prop) ((A -> Prop) -> (A -> Prop) -> A -> Prop) (@group_setinv A _425519) (@group_setmul A _425519))))).
Proof. exact (eq_refl (@quotient_group A)). Qed.
Definition group_kernel {A B : Type'} : (prod (Group A) (Group B)) -> (A -> B) -> A -> Prop := fun _427994 : prod (Group A) (Group B) => fun _427995 : A -> B => @GSPEC A (fun GEN_PVAR_971 : A => exists x : A, @SETSPEC A GEN_PVAR_971 ((@IN A x (@group_carrier A (@fst (Group A) (Group B) _427994))) /\ ((_427995 x) = (@group_id B (@snd (Group A) (Group B) _427994)))) x).
Lemma group_kernel_def {A B : Type'} : (@group_kernel A B) = (fun _427994 : prod (Group A) (Group B) => fun _427995 : A -> B => @GSPEC A (fun GEN_PVAR_971 : A => exists x : A, @SETSPEC A GEN_PVAR_971 ((@IN A x (@group_carrier A (@fst (Group A) (Group B) _427994))) /\ ((_427995 x) = (@group_id B (@snd (Group A) (Group B) _427994)))) x)).
Proof. exact (eq_refl (@group_kernel A B)). Qed.
Definition group_image {A B : Type'} : (prod (Group A) (Group B)) -> (A -> B) -> B -> Prop := fun _428011 : prod (Group A) (Group B) => fun _428012 : A -> B => @IMAGE A B _428012 (@group_carrier A (@fst (Group A) (Group B) _428011)).
Lemma group_image_def {A B : Type'} : (@group_image A B) = (fun _428011 : prod (Group A) (Group B) => fun _428012 : A -> B => @IMAGE A B _428012 (@group_carrier A (@fst (Group A) (Group B) _428011))).
Proof. exact (eq_refl (@group_image A B)). Qed.
Definition trivial_homomorphism {A B : Type'} : (prod (Group A) (Group B)) -> (A -> B) -> Prop := fun _458314 : prod (Group A) (Group B) => fun _458315 : A -> B => (@group_homomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (Group B) _458314) (@snd (Group A) (Group B) _458314)) _458315) /\ (forall x : A, (@IN A x (@group_carrier A (@fst (Group A) (Group B) _458314))) -> (_458315 x) = (@group_id B (@snd (Group A) (Group B) _458314))).
Lemma trivial_homomorphism_def {A B : Type'} : (@trivial_homomorphism A B) = (fun _458314 : prod (Group A) (Group B) => fun _458315 : A -> B => (@group_homomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (Group B) _458314) (@snd (Group A) (Group B) _458314)) _458315) /\ (forall x : A, (@IN A x (@group_carrier A (@fst (Group A) (Group B) _458314))) -> (_458315 x) = (@group_id B (@snd (Group A) (Group B) _458314)))).
Proof. exact (eq_refl (@trivial_homomorphism A B)). Qed.
Definition group_element_order {A : Type'} : (Group A) -> A -> N := fun _459805 : Group A => fun _459806 : A => @ε N (fun d : N => forall n : N, ((@group_pow A _459805 _459806 n) = (@group_id A _459805)) = (num_divides d n)).
Lemma group_element_order_def {A : Type'} : (@group_element_order A) = (fun _459805 : Group A => fun _459806 : A => @ε N (fun d : N => forall n : N, ((@group_pow A _459805 _459806 n) = (@group_id A _459805)) = (num_divides d n))).
Proof. exact (eq_refl (@group_element_order A)). Qed.
Definition cyclic_group {_310016 : Type'} : (Group _310016) -> Prop := fun _464632 : Group _310016 => exists x : _310016, (@IN _310016 x (@group_carrier _310016 _464632)) /\ ((@subgroup_generated _310016 _464632 (@INSERT _310016 x (@EMPTY _310016))) = _464632).
Lemma cyclic_group_def {_310016 : Type'} : (@cyclic_group _310016) = (fun _464632 : Group _310016 => exists x : _310016, (@IN _310016 x (@group_carrier _310016 _464632)) /\ ((@subgroup_generated _310016 _464632 (@INSERT _310016 x (@EMPTY _310016))) = _464632)).
Proof. exact (eq_refl (@cyclic_group _310016)). Qed.
Definition finitely_generated_group {A : Type'} : (Group A) -> Prop := fun _467681 : Group A => exists s : A -> Prop, (@FINITE A s) /\ ((@subgroup_generated A _467681 s) = _467681).
Lemma finitely_generated_group_def {A : Type'} : (@finitely_generated_group A) = (fun _467681 : Group A => exists s : A -> Prop, (@FINITE A s) /\ ((@subgroup_generated A _467681 s) = _467681)).
Proof. exact (eq_refl (@finitely_generated_group A)). Qed.
Definition integer_group : Group Z := @group Z (@pair (Z -> Prop) (prod Z (prod (Z -> Z) (Z -> Z -> Z))) (@UNIV Z) (@pair Z (prod (Z -> Z) (Z -> Z -> Z)) (Z_of_N (NUMERAL 0%N)) (@pair (Z -> Z) (Z -> Z -> Z) int_neg int_add))).
Lemma integer_group_def : integer_group = (@group Z (@pair (Z -> Prop) (prod Z (prod (Z -> Z) (Z -> Z -> Z))) (@UNIV Z) (@pair Z (prod (Z -> Z) (Z -> Z -> Z)) (Z_of_N (NUMERAL 0%N)) (@pair (Z -> Z) (Z -> Z -> Z) int_neg int_add)))).
Proof. exact (eq_refl integer_group). Qed.
Definition integer_mod_group : N -> Group Z := fun _493916 : N => @COND (Group Z) (_493916 = (NUMERAL 0%N)) integer_group (@group Z (@pair (Z -> Prop) (prod Z (prod (Z -> Z) (Z -> Z -> Z))) (@GSPEC Z (fun GEN_PVAR_1055 : Z => exists m : Z, @SETSPEC Z GEN_PVAR_1055 ((int_le (Z_of_N (NUMERAL 0%N)) m) /\ (int_lt m (Z_of_N _493916))) m)) (@pair Z (prod (Z -> Z) (Z -> Z -> Z)) (Z_of_N (NUMERAL 0%N)) (@pair (Z -> Z) (Z -> Z -> Z) (fun a : Z => rem (int_neg a) (Z_of_N _493916)) (fun a : Z => fun b : Z => rem (int_add a b) (Z_of_N _493916)))))).
Lemma integer_mod_group_def : integer_mod_group = (fun _493916 : N => @COND (Group Z) (_493916 = (NUMERAL 0%N)) integer_group (@group Z (@pair (Z -> Prop) (prod Z (prod (Z -> Z) (Z -> Z -> Z))) (@GSPEC Z (fun GEN_PVAR_1055 : Z => exists m : Z, @SETSPEC Z GEN_PVAR_1055 ((int_le (Z_of_N (NUMERAL 0%N)) m) /\ (int_lt m (Z_of_N _493916))) m)) (@pair Z (prod (Z -> Z) (Z -> Z -> Z)) (Z_of_N (NUMERAL 0%N)) (@pair (Z -> Z) (Z -> Z -> Z) (fun a : Z => rem (int_neg a) (Z_of_N _493916)) (fun a : Z => fun b : Z => rem (int_add a b) (Z_of_N _493916))))))).
Proof. exact (eq_refl integer_mod_group). Qed.
Definition pgroup {A : Type'} : (N -> Prop) -> (Group A) -> Prop := fun _496759 : N -> Prop => fun _496760 : Group A => forall p : N, forall x : A, ((prime p) /\ ((@IN A x (@group_carrier A _496760)) /\ (num_divides p (@group_element_order A _496760 x)))) -> @IN N p _496759.
Lemma pgroup_def {A : Type'} : (@pgroup A) = (fun _496759 : N -> Prop => fun _496760 : Group A => forall p : N, forall x : A, ((prime p) /\ ((@IN A x (@group_carrier A _496760)) /\ (num_divides p (@group_element_order A _496760 x)))) -> @IN N p _496759).
Proof. exact (eq_refl (@pgroup A)). Qed.
Definition free_abelian_group {A : Type'} : (A -> Prop) -> Group (frag A) := fun _567156 : A -> Prop => @group (frag A) (@pair ((frag A) -> Prop) (prod (frag A) (prod ((frag A) -> frag A) ((frag A) -> (frag A) -> frag A))) (@GSPEC (frag A) (fun GEN_PVAR_1210 : frag A => exists c : frag A, @SETSPEC (frag A) GEN_PVAR_1210 (@SUBSET A (@frag_support A c) _567156) c)) (@pair (frag A) (prod ((frag A) -> frag A) ((frag A) -> (frag A) -> frag A)) (@frag_0 A) (@pair ((frag A) -> frag A) ((frag A) -> (frag A) -> frag A) (@frag_neg A) (@frag_add A)))).
Lemma free_abelian_group_def {A : Type'} : (@free_abelian_group A) = (fun _567156 : A -> Prop => @group (frag A) (@pair ((frag A) -> Prop) (prod (frag A) (prod ((frag A) -> frag A) ((frag A) -> (frag A) -> frag A))) (@GSPEC (frag A) (fun GEN_PVAR_1210 : frag A => exists c : frag A, @SETSPEC (frag A) GEN_PVAR_1210 (@SUBSET A (@frag_support A c) _567156) c)) (@pair (frag A) (prod ((frag A) -> frag A) ((frag A) -> (frag A) -> frag A)) (@frag_0 A) (@pair ((frag A) -> frag A) ((frag A) -> (frag A) -> frag A) (@frag_neg A) (@frag_add A))))).
Proof. exact (eq_refl (@free_abelian_group A)). Qed.
Definition group_exactness {A B C : Type'} : (prod (Group A) (prod (Group B) (Group C))) -> (prod (A -> B) (B -> C)) -> Prop := fun _568984 : prod (Group A) (prod (Group B) (Group C)) => fun _568985 : prod (A -> B) (B -> C) => (@group_homomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (prod (Group B) (Group C)) _568984) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984))) (@fst (A -> B) (B -> C) _568985)) /\ ((@group_homomorphism B C (@pair (Group B) (Group C) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984)) (@snd (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984))) (@snd (A -> B) (B -> C) _568985)) /\ ((@group_image A B (@pair (Group A) (Group B) (@fst (Group A) (prod (Group B) (Group C)) _568984) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984))) (@fst (A -> B) (B -> C) _568985)) = (@group_kernel B C (@pair (Group B) (Group C) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984)) (@snd (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984))) (@snd (A -> B) (B -> C) _568985)))).
Lemma group_exactness_def {A B C : Type'} : (@group_exactness A B C) = (fun _568984 : prod (Group A) (prod (Group B) (Group C)) => fun _568985 : prod (A -> B) (B -> C) => (@group_homomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (prod (Group B) (Group C)) _568984) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984))) (@fst (A -> B) (B -> C) _568985)) /\ ((@group_homomorphism B C (@pair (Group B) (Group C) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984)) (@snd (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984))) (@snd (A -> B) (B -> C) _568985)) /\ ((@group_image A B (@pair (Group A) (Group B) (@fst (Group A) (prod (Group B) (Group C)) _568984) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984))) (@fst (A -> B) (B -> C) _568985)) = (@group_kernel B C (@pair (Group B) (Group C) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984)) (@snd (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _568984))) (@snd (A -> B) (B -> C) _568985))))).
Proof. exact (eq_refl (@group_exactness A B C)). Qed.
Definition short_exact_sequence {A B C : Type'} : (prod (Group A) (prod (Group B) (Group C))) -> (prod (A -> B) (B -> C)) -> Prop := fun _569011 : prod (Group A) (prod (Group B) (Group C)) => fun _569012 : prod (A -> B) (B -> C) => (@group_monomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (prod (Group B) (Group C)) _569011) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _569011))) (@fst (A -> B) (B -> C) _569012)) /\ ((@group_exactness A B C (@pair (Group A) (prod (Group B) (Group C)) (@fst (Group A) (prod (Group B) (Group C)) _569011) (@pair (Group B) (Group C) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _569011)) (@snd (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _569011)))) (@pair (A -> B) (B -> C) (@fst (A -> B) (B -> C) _569012) (@snd (A -> B) (B -> C) _569012))) /\ (@group_epimorphism B C (@pair (Group B) (Group C) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _569011)) (@snd (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _569011))) (@snd (A -> B) (B -> C) _569012))).
Lemma short_exact_sequence_def {A B C : Type'} : (@short_exact_sequence A B C) = (fun _569011 : prod (Group A) (prod (Group B) (Group C)) => fun _569012 : prod (A -> B) (B -> C) => (@group_monomorphism A B (@pair (Group A) (Group B) (@fst (Group A) (prod (Group B) (Group C)) _569011) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _569011))) (@fst (A -> B) (B -> C) _569012)) /\ ((@group_exactness A B C (@pair (Group A) (prod (Group B) (Group C)) (@fst (Group A) (prod (Group B) (Group C)) _569011) (@pair (Group B) (Group C) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _569011)) (@snd (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _569011)))) (@pair (A -> B) (B -> C) (@fst (A -> B) (B -> C) _569012) (@snd (A -> B) (B -> C) _569012))) /\ (@group_epimorphism B C (@pair (Group B) (Group C) (@fst (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _569011)) (@snd (Group B) (Group C) (@snd (Group A) (prod (Group B) (Group C)) _569011))) (@snd (A -> B) (B -> C) _569012)))).
Proof. exact (eq_refl (@short_exact_sequence A B C)). Qed.
Definition matroid_set {A : Type'} : (Matroid A) -> A -> Prop := fun m : Matroid A => @fst (A -> Prop) ((A -> Prop) -> A -> Prop) (@dest_matroid A m).
Lemma matroid_set_def {A : Type'} : (@matroid_set A) = (fun m : Matroid A => @fst (A -> Prop) ((A -> Prop) -> A -> Prop) (@dest_matroid A m)).
Proof. exact (eq_refl (@matroid_set A)). Qed.
Definition matroid_span {A : Type'} : (Matroid A) -> (A -> Prop) -> A -> Prop := fun m : Matroid A => @snd (A -> Prop) ((A -> Prop) -> A -> Prop) (@dest_matroid A m).
Lemma matroid_span_def {A : Type'} : (@matroid_span A) = (fun m : Matroid A => @snd (A -> Prop) ((A -> Prop) -> A -> Prop) (@dest_matroid A m)).
Proof. exact (eq_refl (@matroid_span A)). Qed.
Definition matroid_spanning {A : Type'} : (Matroid A) -> (A -> Prop) -> Prop := fun _600731 : Matroid A => fun _600732 : A -> Prop => (@SUBSET A _600732 (@matroid_set A _600731)) /\ ((@matroid_span A _600731 _600732) = (@matroid_set A _600731)).
Lemma matroid_spanning_def {A : Type'} : (@matroid_spanning A) = (fun _600731 : Matroid A => fun _600732 : A -> Prop => (@SUBSET A _600732 (@matroid_set A _600731)) /\ ((@matroid_span A _600731 _600732) = (@matroid_set A _600731))).
Proof. exact (eq_refl (@matroid_spanning A)). Qed.
Definition matroid_independent {A : Type'} : (Matroid A) -> (A -> Prop) -> Prop := fun _600743 : Matroid A => fun _600744 : A -> Prop => (@SUBSET A _600744 (@matroid_set A _600743)) /\ (forall x : A, (@IN A x _600744) -> ~ (@IN A x (@matroid_span A _600743 (@DELETE A _600744 x)))).
Lemma matroid_independent_def {A : Type'} : (@matroid_independent A) = (fun _600743 : Matroid A => fun _600744 : A -> Prop => (@SUBSET A _600744 (@matroid_set A _600743)) /\ (forall x : A, (@IN A x _600744) -> ~ (@IN A x (@matroid_span A _600743 (@DELETE A _600744 x))))).
Proof. exact (eq_refl (@matroid_independent A)). Qed.
Definition matroid_basis {A : Type'} : (Matroid A) -> (A -> Prop) -> Prop := fun _600755 : Matroid A => fun _600756 : A -> Prop => (@matroid_spanning A _600755 _600756) /\ (@matroid_independent A _600755 _600756).
Lemma matroid_basis_def {A : Type'} : (@matroid_basis A) = (fun _600755 : Matroid A => fun _600756 : A -> Prop => (@matroid_spanning A _600755 _600756) /\ (@matroid_independent A _600755 _600756)).
Proof. exact (eq_refl (@matroid_basis A)). Qed.
Definition matroid_subspace {A : Type'} : (Matroid A) -> (A -> Prop) -> Prop := fun _607285 : Matroid A => fun _607286 : A -> Prop => (@SUBSET A _607286 (@matroid_set A _607285)) /\ ((@matroid_span A _607285 _607286) = _607286).
Lemma matroid_subspace_def {A : Type'} : (@matroid_subspace A) = (fun _607285 : Matroid A => fun _607286 : A -> Prop => (@SUBSET A _607286 (@matroid_set A _607285)) /\ ((@matroid_span A _607285 _607286) = _607286)).
Proof. exact (eq_refl (@matroid_subspace A)). Qed.
Definition submatroid {A : Type'} : (Matroid A) -> (A -> Prop) -> Matroid A := fun _607432 : Matroid A => fun _607433 : A -> Prop => @matroid A (@pair (A -> Prop) ((A -> Prop) -> A -> Prop) (@matroid_span A _607432 (@INTER A (@matroid_set A _607432) _607433)) (@matroid_span A _607432)).
Lemma submatroid_def {A : Type'} : (@submatroid A) = (fun _607432 : Matroid A => fun _607433 : A -> Prop => @matroid A (@pair (A -> Prop) ((A -> Prop) -> A -> Prop) (@matroid_span A _607432 (@INTER A (@matroid_set A _607432) _607433)) (@matroid_span A _607432))).
Proof. exact (eq_refl (@submatroid A)). Qed.
Definition matroid_finite_dimensional {A : Type'} : (Matroid A) -> Prop := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))))))))) -> (Matroid A) -> Prop) (fun matroid_finite_dimensional' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))))))))) -> (Matroid A) -> Prop => forall _607866 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))))))))), forall m : Matroid A, (matroid_finite_dimensional' _607866 m) = (exists b : A -> Prop, (@FINITE A b) /\ (@matroid_spanning A m b))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N))))))))))))))))))))))))))))))))).
Lemma matroid_finite_dimensional_def {A : Type'} : (@matroid_finite_dimensional A) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))))))))) -> (Matroid A) -> Prop) (fun matroid_finite_dimensional' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))))))))) -> (Matroid A) -> Prop => forall _607866 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))))))))), forall m : Matroid A, (matroid_finite_dimensional' _607866 m) = (exists b : A -> Prop, (@FINITE A b) /\ (@matroid_spanning A m b))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))))))))))))))))))))))))))))).
Proof. exact (eq_refl (@matroid_finite_dimensional A)). Qed.
Definition matroid_dimension {A : Type'} : (Matroid A) -> N := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))) -> (Matroid A) -> N) (fun matroid_dimension' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))) -> (Matroid A) -> N => forall _607891 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))), forall m : Matroid A, (matroid_dimension' _607891 m) = (@ε N (fun n : N => forall b : A -> Prop, (@matroid_basis A m b) -> @HAS_SIZE A b n))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))))))))))))))))))).
Lemma matroid_dimension_def {A : Type'} : (@matroid_dimension A) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))) -> (Matroid A) -> N) (fun matroid_dimension' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))) -> (Matroid A) -> N => forall _607891 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))), forall m : Matroid A, (matroid_dimension' _607891 m) = (@ε N (fun n : N => forall b : A -> Prop, (@matroid_basis A m b) -> @HAS_SIZE A b n))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N))))))))))))))))))))))))).
Proof. exact (eq_refl (@matroid_dimension A)). Qed.
Definition matroid_finite_dim {A : Type'} : (Matroid A) -> (A -> Prop) -> Prop := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))) -> (Matroid A) -> (A -> Prop) -> Prop) (fun matroid_finite_dim' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))) -> (Matroid A) -> (A -> Prop) -> Prop => forall _608005 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))), forall m : Matroid A, forall s : A -> Prop, (matroid_finite_dim' _608005 m s) = ((@SUBSET A s (@matroid_set A m)) /\ (@matroid_finite_dimensional A (@submatroid A m s)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N))))))))))))))))))))))))).
Lemma matroid_finite_dim_def {A : Type'} : (@matroid_finite_dim A) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))) -> (Matroid A) -> (A -> Prop) -> Prop) (fun matroid_finite_dim' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))))) -> (Matroid A) -> (A -> Prop) -> Prop => forall _608005 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))), forall m : Matroid A, forall s : A -> Prop, (matroid_finite_dim' _608005 m s) = ((@SUBSET A s (@matroid_set A m)) /\ (@matroid_finite_dimensional A (@submatroid A m s)))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))))))))))))))))))))).
Proof. exact (eq_refl (@matroid_finite_dim A)). Qed.
Definition matroid_dim {A : Type'} : (Matroid A) -> (A -> Prop) -> N := @ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (Matroid A) -> (A -> Prop) -> N) (fun matroid_dim' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (Matroid A) -> (A -> Prop) -> N => forall _608119 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))), forall m : Matroid A, forall s : A -> Prop, (matroid_dim' _608119 m s) = (@matroid_dimension A (@submatroid A m s))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))))))))))))).
Lemma matroid_dim_def {A : Type'} : (@matroid_dim A) = (@ε ((prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (Matroid A) -> (A -> Prop) -> N) (fun matroid_dim' : (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))))) -> (Matroid A) -> (A -> Prop) -> N => forall _608119 : prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))), forall m : Matroid A, forall s : A -> Prop, (matroid_dim' _608119 m s) = (@matroid_dimension A (@submatroid A m s))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N)))))))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N (prod N N))))))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N (prod N N)))))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N (prod N N))))) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N (prod N N)))) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT0 (BIT1 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N))))))))))))))))))).
Proof. exact (eq_refl (@matroid_dim A)). Qed.
Definition binom : (prod N N) -> N := @ε ((prod N (prod N (prod N (prod N N)))) -> (prod N N) -> N) (fun binom' : (prod N (prod N (prod N (prod N N)))) -> (prod N N) -> N => forall _612257 : prod N (prod N (prod N (prod N N))), (forall n : N, (binom' _612257 (@pair N N n (NUMERAL 0%N))) = (NUMERAL (BIT1 0%N))) /\ ((forall k : N, (binom' _612257 (@pair N N (NUMERAL 0%N) (N.succ k))) = (NUMERAL 0%N)) /\ (forall n : N, forall k : N, (binom' _612257 (@pair N N (N.succ n) (N.succ k))) = (N.add (binom' _612257 (@pair N N n (N.succ k))) (binom' _612257 (@pair N N n k)))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))))))).
Lemma binom_def : binom = (@ε ((prod N (prod N (prod N (prod N N)))) -> (prod N N) -> N) (fun binom' : (prod N (prod N (prod N (prod N N)))) -> (prod N N) -> N => forall _612257 : prod N (prod N (prod N (prod N N))), (forall n : N, (binom' _612257 (@pair N N n (NUMERAL 0%N))) = (NUMERAL (BIT1 0%N))) /\ ((forall k : N, (binom' _612257 (@pair N N (NUMERAL 0%N) (N.succ k))) = (NUMERAL 0%N)) /\ (forall n : N, forall k : N, (binom' _612257 (@pair N N (N.succ n) (N.succ k))) = (N.add (binom' _612257 (@pair N N n (N.succ k))) (binom' _612257 (@pair N N n k)))))) (@pair N (prod N (prod N (prod N N))) (NUMERAL (BIT0 (BIT1 (BIT0 (BIT0 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N (prod N N)) (NUMERAL (BIT1 (BIT0 (BIT0 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N (prod N N) (NUMERAL (BIT0 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (@pair N N (NUMERAL (BIT1 (BIT1 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N)))))))) (NUMERAL (BIT1 (BIT0 (BIT1 (BIT1 (BIT0 (BIT1 (BIT1 0%N))))))))))))).
Proof. exact (eq_refl binom). Qed.
Definition istopology {_350906 : Type'} : ((_350906 -> Prop) -> Prop) -> Prop := fun _613298 : (_350906 -> Prop) -> Prop => (@IN (_350906 -> Prop) (@EMPTY _350906) _613298) /\ ((forall s : _350906 -> Prop, forall t : _350906 -> Prop, ((@IN (_350906 -> Prop) s _613298) /\ (@IN (_350906 -> Prop) t _613298)) -> @IN (_350906 -> Prop) (@INTER _350906 s t) _613298) /\ (forall k : (_350906 -> Prop) -> Prop, (@SUBSET (_350906 -> Prop) k _613298) -> @IN (_350906 -> Prop) (@UNIONS _350906 k) _613298)).
Lemma istopology_def {_350906 : Type'} : (@istopology _350906) = (fun _613298 : (_350906 -> Prop) -> Prop => (@IN (_350906 -> Prop) (@EMPTY _350906) _613298) /\ ((forall s : _350906 -> Prop, forall t : _350906 -> Prop, ((@IN (_350906 -> Prop) s _613298) /\ (@IN (_350906 -> Prop) t _613298)) -> @IN (_350906 -> Prop) (@INTER _350906 s t) _613298) /\ (forall k : (_350906 -> Prop) -> Prop, (@SUBSET (_350906 -> Prop) k _613298) -> @IN (_350906 -> Prop) (@UNIONS _350906 k) _613298))).
Proof. exact (eq_refl (@istopology _350906)). Qed.
Definition topspace {_350968 : Type'} : (Topology _350968) -> _350968 -> Prop := fun _613340 : Topology _350968 => @UNIONS _350968 (@GSPEC (_350968 -> Prop) (fun GEN_PVAR_1231 : _350968 -> Prop => exists s : _350968 -> Prop, @SETSPEC (_350968 -> Prop) GEN_PVAR_1231 (@open_in _350968 _613340 s) s)).
Lemma topspace_def {_350968 : Type'} : (@topspace _350968) = (fun _613340 : Topology _350968 => @UNIONS _350968 (@GSPEC (_350968 -> Prop) (fun GEN_PVAR_1231 : _350968 -> Prop => exists s : _350968 -> Prop, @SETSPEC (_350968 -> Prop) GEN_PVAR_1231 (@open_in _350968 _613340 s) s))).
Proof. exact (eq_refl (@topspace _350968)). Qed.
Definition closed_in {_351271 : Type'} : (Topology _351271) -> (_351271 -> Prop) -> Prop := fun _613375 : Topology _351271 => fun _613376 : _351271 -> Prop => (@SUBSET _351271 _613376 (@topspace _351271 _613375)) /\ (@open_in _351271 _613375 (@DIFF _351271 (@topspace _351271 _613375) _613376)).
Lemma closed_in_def {_351271 : Type'} : (@closed_in _351271) = (fun _613375 : Topology _351271 => fun _613376 : _351271 -> Prop => (@SUBSET _351271 _613376 (@topspace _351271 _613375)) /\ (@open_in _351271 _613375 (@DIFF _351271 (@topspace _351271 _613375) _613376))).
Proof. exact (eq_refl (@closed_in _351271)). Qed.
Definition discrete_topology {A : Type'} : (A -> Prop) -> Topology A := fun _613954 : A -> Prop => @topology A (@GSPEC (A -> Prop) (fun GEN_PVAR_1235 : A -> Prop => exists s : A -> Prop, @SETSPEC (A -> Prop) GEN_PVAR_1235 (@SUBSET A s _613954) s)).
Lemma discrete_topology_def {A : Type'} : (@discrete_topology A) = (fun _613954 : A -> Prop => @topology A (@GSPEC (A -> Prop) (fun GEN_PVAR_1235 : A -> Prop => exists s : A -> Prop, @SETSPEC (A -> Prop) GEN_PVAR_1235 (@SUBSET A s _613954) s))).
Proof. exact (eq_refl (@discrete_topology A)). Qed.
Definition discrete_space {A : Type'} : (Topology A) -> Prop := fun _613959 : Topology A => (@discrete_topology A (@topspace A _613959)) = _613959.
Lemma discrete_space_def {A : Type'} : (@discrete_space A) = (fun _613959 : Topology A => (@discrete_topology A (@topspace A _613959)) = _613959).
Proof. exact (eq_refl (@discrete_space A)). Qed.
Definition subtopology {_352607 : Type'} : (Topology _352607) -> (_352607 -> Prop) -> Topology _352607 := fun _614305 : Topology _352607 => fun _614306 : _352607 -> Prop => @topology _352607 (@GSPEC (_352607 -> Prop) (fun GEN_PVAR_1237 : _352607 -> Prop => exists s : _352607 -> Prop, @SETSPEC (_352607 -> Prop) GEN_PVAR_1237 (@open_in _352607 _614305 s) (@INTER _352607 s _614306))).
Lemma subtopology_def {_352607 : Type'} : (@subtopology _352607) = (fun _614305 : Topology _352607 => fun _614306 : _352607 -> Prop => @topology _352607 (@GSPEC (_352607 -> Prop) (fun GEN_PVAR_1237 : _352607 -> Prop => exists s : _352607 -> Prop, @SETSPEC (_352607 -> Prop) GEN_PVAR_1237 (@open_in _352607 _614305 s) (@INTER _352607 s _614306)))).
Proof. exact (eq_refl (@subtopology _352607)). Qed.
Definition hereditarily {A : Type'} : ((Topology A) -> Prop) -> (Topology A) -> Prop := fun _615305 : (Topology A) -> Prop => fun _615306 : Topology A => forall s : A -> Prop, (@SUBSET A s (@topspace A _615306)) -> _615305 (@subtopology A _615306 s).
Lemma hereditarily_def {A : Type'} : (@hereditarily A) = (fun _615305 : (Topology A) -> Prop => fun _615306 : Topology A => forall s : A -> Prop, (@SUBSET A s (@topspace A _615306)) -> _615305 (@subtopology A _615306 s)).
Proof. exact (eq_refl (@hereditarily A)). Qed.
Definition derived_set_of {A : Type'} : (Topology A) -> (A -> Prop) -> A -> Prop := fun _615327 : Topology A => fun _615328 : A -> Prop => @GSPEC A (fun GEN_PVAR_1246 : A => exists x : A, @SETSPEC A GEN_PVAR_1246 ((@IN A x (@topspace A _615327)) /\ (forall t : A -> Prop, ((@IN A x t) /\ (@open_in A _615327 t)) -> exists y : A, (~ (y = x)) /\ ((@IN A y _615328) /\ (@IN A y t)))) x).
Lemma derived_set_of_def {A : Type'} : (@derived_set_of A) = (fun _615327 : Topology A => fun _615328 : A -> Prop => @GSPEC A (fun GEN_PVAR_1246 : A => exists x : A, @SETSPEC A GEN_PVAR_1246 ((@IN A x (@topspace A _615327)) /\ (forall t : A -> Prop, ((@IN A x t) /\ (@open_in A _615327 t)) -> exists y : A, (~ (y = x)) /\ ((@IN A y _615328) /\ (@IN A y t)))) x)).
Proof. exact (eq_refl (@derived_set_of A)). Qed.
Definition closure_of {A : Type'} : (Topology A) -> (A -> Prop) -> A -> Prop := fun _615766 : Topology A => fun _615767 : A -> Prop => @GSPEC A (fun GEN_PVAR_1249 : A => exists x : A, @SETSPEC A GEN_PVAR_1249 ((@IN A x (@topspace A _615766)) /\ (forall t : A -> Prop, ((@IN A x t) /\ (@open_in A _615766 t)) -> exists y : A, (@IN A y _615767) /\ (@IN A y t))) x).
Lemma closure_of_def {A : Type'} : (@closure_of A) = (fun _615766 : Topology A => fun _615767 : A -> Prop => @GSPEC A (fun GEN_PVAR_1249 : A => exists x : A, @SETSPEC A GEN_PVAR_1249 ((@IN A x (@topspace A _615766)) /\ (forall t : A -> Prop, ((@IN A x t) /\ (@open_in A _615766 t)) -> exists y : A, (@IN A y _615767) /\ (@IN A y t))) x)).
Proof. exact (eq_refl (@closure_of A)). Qed.
Definition interior_of {_357493 : Type'} : (Topology _357493) -> (_357493 -> Prop) -> _357493 -> Prop := fun _616306 : Topology _357493 => fun _616307 : _357493 -> Prop => @GSPEC _357493 (fun GEN_PVAR_1259 : _357493 => exists x : _357493, @SETSPEC _357493 GEN_PVAR_1259 (exists t : _357493 -> Prop, (@open_in _357493 _616306 t) /\ ((@IN _357493 x t) /\ (@SUBSET _357493 t _616307))) x).
Lemma interior_of_def {_357493 : Type'} : (@interior_of _357493) = (fun _616306 : Topology _357493 => fun _616307 : _357493 -> Prop => @GSPEC _357493 (fun GEN_PVAR_1259 : _357493 => exists x : _357493, @SETSPEC _357493 GEN_PVAR_1259 (exists t : _357493 -> Prop, (@open_in _357493 _616306 t) /\ ((@IN _357493 x t) /\ (@SUBSET _357493 t _616307))) x)).
Proof. exact (eq_refl (@interior_of _357493)). Qed.
Definition frontier_of {_358829 : Type'} : (Topology _358829) -> (_358829 -> Prop) -> _358829 -> Prop := fun _616667 : Topology _358829 => fun _616668 : _358829 -> Prop => @DIFF _358829 (@closure_of _358829 _616667 _616668) (@interior_of _358829 _616667 _616668).
Lemma frontier_of_def {_358829 : Type'} : (@frontier_of _358829) = (fun _616667 : Topology _358829 => fun _616668 : _358829 -> Prop => @DIFF _358829 (@closure_of _358829 _616667 _616668) (@interior_of _358829 _616667 _616668)).
Proof. exact (eq_refl (@frontier_of _358829)). Qed.
Definition locally_finite_in {_360557 : Type'} : (Topology _360557) -> ((_360557 -> Prop) -> Prop) -> Prop := fun _617070 : Topology _360557 => fun _617071 : (_360557 -> Prop) -> Prop => (forall u : _360557 -> Prop, (@IN (_360557 -> Prop) u _617071) -> @SUBSET _360557 u (@topspace _360557 _617070)) /\ (forall x : _360557, (@IN _360557 x (@topspace _360557 _617070)) -> exists v : _360557 -> Prop, (@open_in _360557 _617070 v) /\ ((@IN _360557 x v) /\ (@FINITE (_360557 -> Prop) (@GSPEC (_360557 -> Prop) (fun GEN_PVAR_1263 : _360557 -> Prop => exists u : _360557 -> Prop, @SETSPEC (_360557 -> Prop) GEN_PVAR_1263 ((@IN (_360557 -> Prop) u _617071) /\ (~ ((@INTER _360557 u v) = (@EMPTY _360557)))) u))))).
Lemma locally_finite_in_def {_360557 : Type'} : (@locally_finite_in _360557) = (fun _617070 : Topology _360557 => fun _617071 : (_360557 -> Prop) -> Prop => (forall u : _360557 -> Prop, (@IN (_360557 -> Prop) u _617071) -> @SUBSET _360557 u (@topspace _360557 _617070)) /\ (forall x : _360557, (@IN _360557 x (@topspace _360557 _617070)) -> exists v : _360557 -> Prop, (@open_in _360557 _617070 v) /\ ((@IN _360557 x v) /\ (@FINITE (_360557 -> Prop) (@GSPEC (_360557 -> Prop) (fun GEN_PVAR_1263 : _360557 -> Prop => exists u : _360557 -> Prop, @SETSPEC (_360557 -> Prop) GEN_PVAR_1263 ((@IN (_360557 -> Prop) u _617071) /\ (~ ((@INTER _360557 u v) = (@EMPTY _360557)))) u)))))).
Proof. exact (eq_refl (@locally_finite_in _360557)). Qed.
Definition continuous_map {A B : Type'} : (prod (Topology A) (Topology B)) -> (A -> B) -> Prop := fun _617296 : prod (Topology A) (Topology B) => fun _617297 : A -> B => (forall x : A, (@IN A x (@topspace A (@fst (Topology A) (Topology B) _617296))) -> @IN B (_617297 x) (@topspace B (@snd (Topology A) (Topology B) _617296))) /\ (forall u : B -> Prop, (@open_in B (@snd (Topology A) (Topology B) _617296) u) -> @open_in A (@fst (Topology A) (Topology B) _617296) (@GSPEC A (fun GEN_PVAR_1276 : A => exists x : A, @SETSPEC A GEN_PVAR_1276 ((@IN A x (@topspace A (@fst (Topology A) (Topology B) _617296))) /\ (@IN B (_617297 x) u)) x))).
Lemma continuous_map_def {A B : Type'} : (@continuous_map A B) = (fun _617296 : prod (Topology A) (Topology B) => fun _617297 : A -> B => (forall x : A, (@IN A x (@topspace A (@fst (Topology A) (Topology B) _617296))) -> @IN B (_617297 x) (@topspace B (@snd (Topology A) (Topology B) _617296))) /\ (forall u : B -> Prop, (@open_in B (@snd (Topology A) (Topology B) _617296) u) -> @open_in A (@fst (Topology A) (Topology B) _617296) (@GSPEC A (fun GEN_PVAR_1276 : A => exists x : A, @SETSPEC A GEN_PVAR_1276 ((@IN A x (@topspace A (@fst (Topology A) (Topology B) _617296))) /\ (@IN B (_617297 x) u)) x)))).
Proof. exact (eq_refl (@continuous_map A B)). Qed.
Definition open_map {A B : Type'} : (prod (Topology A) (Topology B)) -> (A -> B) -> Prop := fun _625338 : prod (Topology A) (Topology B) => fun _625339 : A -> B => forall u : A -> Prop, (@open_in A (@fst (Topology A) (Topology B) _625338) u) -> @open_in B (@snd (Topology A) (Topology B) _625338) (@IMAGE A B _625339 u).
Lemma open_map_def {A B : Type'} : (@open_map A B) = (fun _625338 : prod (Topology A) (Topology B) => fun _625339 : A -> B => forall u : A -> Prop, (@open_in A (@fst (Topology A) (Topology B) _625338) u) -> @open_in B (@snd (Topology A) (Topology B) _625338) (@IMAGE A B _625339 u)).
Proof. exact (eq_refl (@open_map A B)). Qed.
Definition closed_map {A B : Type'} : (prod (Topology A) (Topology B)) -> (A -> B) -> Prop := fun _625355 : prod (Topology A) (Topology B) => fun _625356 : A -> B => forall u : A -> Prop, (@closed_in A (@fst (Topology A) (Topology B) _625355) u) -> @closed_in B (@snd (Topology A) (Topology B) _625355) (@IMAGE A B _625356 u).
Lemma closed_map_def {A B : Type'} : (@closed_map A B) = (fun _625355 : prod (Topology A) (Topology B) => fun _625356 : A -> B => forall u : A -> Prop, (@closed_in A (@fst (Topology A) (Topology B) _625355) u) -> @closed_in B (@snd (Topology A) (Topology B) _625355) (@IMAGE A B _625356 u)).
Proof. exact (eq_refl (@closed_map A B)). Qed.
Definition quotient_map {A B : Type'} : (prod (Topology A) (Topology B)) -> (A -> B) -> Prop := fun _629186 : prod (Topology A) (Topology B) => fun _629187 : A -> B => ((@IMAGE A B _629187 (@topspace A (@fst (Topology A) (Topology B) _629186))) = (@topspace B (@snd (Topology A) (Topology B) _629186))) /\ (forall u : B -> Prop, (@SUBSET B u (@topspace B (@snd (Topology A) (Topology B) _629186))) -> (@open_in A (@fst (Topology A) (Topology B) _629186) (@GSPEC A (fun GEN_PVAR_1371 : A => exists x : A, @SETSPEC A GEN_PVAR_1371 ((@IN A x (@topspace A (@fst (Topology A) (Topology B) _629186))) /\ (@IN B (_629187 x) u)) x))) = (@open_in B (@snd (Topology A) (Topology B) _629186) u)).
Lemma quotient_map_def {A B : Type'} : (@quotient_map A B) = (fun _629186 : prod (Topology A) (Topology B) => fun _629187 : A -> B => ((@IMAGE A B _629187 (@topspace A (@fst (Topology A) (Topology B) _629186))) = (@topspace B (@snd (Topology A) (Topology B) _629186))) /\ (forall u : B -> Prop, (@SUBSET B u (@topspace B (@snd (Topology A) (Topology B) _629186))) -> (@open_in A (@fst (Topology A) (Topology B) _629186) (@GSPEC A (fun GEN_PVAR_1371 : A => exists x : A, @SETSPEC A GEN_PVAR_1371 ((@IN A x (@topspace A (@fst (Topology A) (Topology B) _629186))) /\ (@IN B (_629187 x) u)) x))) = (@open_in B (@snd (Topology A) (Topology B) _629186) u))).
Proof. exact (eq_refl (@quotient_map A B)). Qed.
Definition prod_topology {A B : Type'} : (Topology A) -> (Topology B) -> Topology (prod A B) := fun _638421 : Topology A => fun _638422 : Topology B => @topology (prod A B) (@UNION_OF (prod A B) (@ARBITRARY (prod A B)) (@GSPEC ((prod A B) -> Prop) (fun GEN_PVAR_1385 : (prod A B) -> Prop => exists s : A -> Prop, exists t : B -> Prop, @SETSPEC ((prod A B) -> Prop) GEN_PVAR_1385 ((@open_in A _638421 s) /\ (@open_in B _638422 t)) (@CROSS A B s t)))).
Lemma prod_topology_def {A B : Type'} : (@prod_topology A B) = (fun _638421 : Topology A => fun _638422 : Topology B => @topology (prod A B) (@UNION_OF (prod A B) (@ARBITRARY (prod A B)) (@GSPEC ((prod A B) -> Prop) (fun GEN_PVAR_1385 : (prod A B) -> Prop => exists s : A -> Prop, exists t : B -> Prop, @SETSPEC ((prod A B) -> Prop) GEN_PVAR_1385 ((@open_in A _638421 s) /\ (@open_in B _638422 t)) (@CROSS A B s t))))).
Proof. exact (eq_refl (@prod_topology A B)). Qed.
Definition product_topology {A K : Type'} : (K -> Prop) -> (K -> Topology A) -> Topology (K -> A) := fun _642306 : K -> Prop => fun _642307 : K -> Topology A => @topology (K -> A) (@UNION_OF (K -> A) (@ARBITRARY (K -> A)) (@relative_to (K -> A) (@INTERSECTION_OF (K -> A) (@FINITE ((K -> A) -> Prop)) (@GSPEC ((K -> A) -> Prop) (fun GEN_PVAR_1390 : (K -> A) -> Prop => exists k : K, exists u : A -> Prop, @SETSPEC ((K -> A) -> Prop) GEN_PVAR_1390 ((@IN K k _642306) /\ (@open_in A (_642307 k) u)) (@GSPEC (K -> A) (fun GEN_PVAR_1389 : K -> A => exists x : K -> A, @SETSPEC (K -> A) GEN_PVAR_1389 (@IN A (x k) u) x))))) (@GSPEC (K -> A) (fun GEN_PVAR_1391 : K -> A => exists x : K -> A, @SETSPEC (K -> A) GEN_PVAR_1391 ((@EXTENSIONAL K A _642306 x) /\ (forall k : K, (@IN K k _642306) -> @IN A (x k) (@topspace A (_642307 k)))) x)))).
Lemma product_topology_def {A K : Type'} : (@product_topology A K) = (fun _642306 : K -> Prop => fun _642307 : K -> Topology A => @topology (K -> A) (@UNION_OF (K -> A) (@ARBITRARY (K -> A)) (@relative_to (K -> A) (@INTERSECTION_OF (K -> A) (@FINITE ((K -> A) -> Prop)) (@GSPEC ((K -> A) -> Prop) (fun GEN_PVAR_1390 : (K -> A) -> Prop => exists k : K, exists u : A -> Prop, @SETSPEC ((K -> A) -> Prop) GEN_PVAR_1390 ((@IN K k _642306) /\ (@open_in A (_642307 k) u)) (@GSPEC (K -> A) (fun GEN_PVAR_1389 : K -> A => exists x : K -> A, @SETSPEC (K -> A) GEN_PVAR_1389 (@IN A (x k) u) x))))) (@GSPEC (K -> A) (fun GEN_PVAR_1391 : K -> A => exists x : K -> A, @SETSPEC (K -> A) GEN_PVAR_1391 ((@EXTENSIONAL K A _642306 x) /\ (forall k : K, (@IN K k _642306) -> @IN A (x k) (@topspace A (_642307 k)))) x))))).
Proof. exact (eq_refl (@product_topology A K)). Qed.
Definition sum_topology {A K : Type'} : (K -> Prop) -> (K -> Topology A) -> Topology (prod K A) := fun _649397 : K -> Prop => fun _649398 : K -> Topology A => @topology (prod K A) (@GSPEC ((prod K A) -> Prop) (fun GEN_PVAR_1454 : (prod K A) -> Prop => exists u : (prod K A) -> Prop, @SETSPEC ((prod K A) -> Prop) GEN_PVAR_1454 ((@SUBSET (prod K A) u (@disjoint_union A K _649397 (@o K (Topology A) (A -> Prop) (@topspace A) _649398))) /\ (forall i : K, (@IN K i _649397) -> @open_in A (_649398 i) (@GSPEC A (fun GEN_PVAR_1453 : A => exists x : A, @SETSPEC A GEN_PVAR_1453 (@IN (prod K A) (@pair K A i x) u) x)))) u)).
Lemma sum_topology_def {A K : Type'} : (@sum_topology A K) = (fun _649397 : K -> Prop => fun _649398 : K -> Topology A => @topology (prod K A) (@GSPEC ((prod K A) -> Prop) (fun GEN_PVAR_1454 : (prod K A) -> Prop => exists u : (prod K A) -> Prop, @SETSPEC ((prod K A) -> Prop) GEN_PVAR_1454 ((@SUBSET (prod K A) u (@disjoint_union A K _649397 (@o K (Topology A) (A -> Prop) (@topspace A) _649398))) /\ (forall i : K, (@IN K i _649397) -> @open_in A (_649398 i) (@GSPEC A (fun GEN_PVAR_1453 : A => exists x : A, @SETSPEC A GEN_PVAR_1453 (@IN (prod K A) (@pair K A i x) u) x)))) u))).
Proof. exact (eq_refl (@sum_topology A K)). Qed.
Definition homeomorphic_map {A B : Type'} : (prod (Topology A) (Topology B)) -> (A -> B) -> Prop := fun _649924 : prod (Topology A) (Topology B) => fun _649925 : A -> B => (@quotient_map A B (@pair (Topology A) (Topology B) (@fst (Topology A) (Topology B) _649924) (@snd (Topology A) (Topology B) _649924)) _649925) /\ (forall x : A, forall y : A, ((@IN A x (@topspace A (@fst (Topology A) (Topology B) _649924))) /\ (@IN A y (@topspace A (@fst (Topology A) (Topology B) _649924)))) -> ((_649925 x) = (_649925 y)) = (x = y)).
Lemma homeomorphic_map_def {A B : Type'} : (@homeomorphic_map A B) = (fun _649924 : prod (Topology A) (Topology B) => fun _649925 : A -> B => (@quotient_map A B (@pair (Topology A) (Topology B) (@fst (Topology A) (Topology B) _649924) (@snd (Topology A) (Topology B) _649924)) _649925) /\ (forall x : A, forall y : A, ((@IN A x (@topspace A (@fst (Topology A) (Topology B) _649924))) /\ (@IN A y (@topspace A (@fst (Topology A) (Topology B) _649924)))) -> ((_649925 x) = (_649925 y)) = (x = y))).
Proof. exact (eq_refl (@homeomorphic_map A B)). Qed.
Definition homeomorphic_maps {A B : Type'} : (prod (Topology A) (Topology B)) -> (prod (A -> B) (B -> A)) -> Prop := fun _649941 : prod (Topology A) (Topology B) => fun _649942 : prod (A -> B) (B -> A) => (@continuous_map A B (@pair (Topology A) (Topology B) (@fst (Topology A) (Topology B) _649941) (@snd (Topology A) (Topology B) _649941)) (@fst (A -> B) (B -> A) _649942)) /\ ((@continuous_map B A (@pair (Topology B) (Topology A) (@snd (Topology A) (Topology B) _649941) (@fst (Topology A) (Topology B) _649941)) (@snd (A -> B) (B -> A) _649942)) /\ ((forall x : A, (@IN A x (@topspace A (@fst (Topology A) (Topology B) _649941))) -> (@snd (A -> B) (B -> A) _649942 (@fst (A -> B) (B -> A) _649942 x)) = x) /\ (forall y : B, (@IN B y (@topspace B (@snd (Topology A) (Topology B) _649941))) -> (@fst (A -> B) (B -> A) _649942 (@snd (A -> B) (B -> A) _649942 y)) = y))).
Lemma homeomorphic_maps_def {A B : Type'} : (@homeomorphic_maps A B) = (fun _649941 : prod (Topology A) (Topology B) => fun _649942 : prod (A -> B) (B -> A) => (@continuous_map A B (@pair (Topology A) (Topology B) (@fst (Topology A) (Topology B) _649941) (@snd (Topology A) (Topology B) _649941)) (@fst (A -> B) (B -> A) _649942)) /\ ((@continuous_map B A (@pair (Topology B) (Topology A) (@snd (Topology A) (Topology B) _649941) (@fst (Topology A) (Topology B) _649941)) (@snd (A -> B) (B -> A) _649942)) /\ ((forall x : A, (@IN A x (@topspace A (@fst (Topology A) (Topology B) _649941))) -> (@snd (A -> B) (B -> A) _649942 (@fst (A -> B) (B -> A) _649942 x)) = x) /\ (forall y : B, (@IN B y (@topspace B (@snd (Topology A) (Topology B) _649941))) -> (@fst (A -> B) (B -> A) _649942 (@snd (A -> B) (B -> A) _649942 y)) = y)))).
Proof. exact (eq_refl (@homeomorphic_maps A B)). Qed.
Definition homeomorphic_space {A B : Type'} : (Topology A) -> (Topology B) -> Prop := fun _703343 : Topology A => fun _703344 : Topology B => exists f : A -> B, exists g : B -> A, @homeomorphic_maps A B (@pair (Topology A) (Topology B) _703343 _703344) (@pair (A -> B) (B -> A) f g).
Lemma homeomorphic_space_def {A B : Type'} : (@homeomorphic_space A B) = (fun _703343 : Topology A => fun _703344 : Topology B => exists f : A -> B, exists g : B -> A, @homeomorphic_maps A B (@pair (Topology A) (Topology B) _703343 _703344) (@pair (A -> B) (B -> A) f g)).
Proof. exact (eq_refl (@homeomorphic_space A B)). Qed.
Definition embedding_map {A B : Type'} : (prod (Topology A) (Topology B)) -> (A -> B) -> Prop := fun _704677 : prod (Topology A) (Topology B) => fun _704678 : A -> B => @homeomorphic_map A B (@pair (Topology A) (Topology B) (@fst (Topology A) (Topology B) _704677) (@subtopology B (@snd (Topology A) (Topology B) _704677) (@IMAGE A B _704678 (@topspace A (@fst (Topology A) (Topology B) _704677))))) _704678.
Lemma embedding_map_def {A B : Type'} : (@embedding_map A B) = (fun _704677 : prod (Topology A) (Topology B) => fun _704678 : A -> B => @homeomorphic_map A B (@pair (Topology A) (Topology B) (@fst (Topology A) (Topology B) _704677) (@subtopology B (@snd (Topology A) (Topology B) _704677) (@IMAGE A B _704678 (@topspace A (@fst (Topology A) (Topology B) _704677))))) _704678).
Proof. exact (eq_refl (@embedding_map A B)). Qed.
Definition retraction_maps {A B : Type'} : (prod (Topology A) (Topology B)) -> (prod (A -> B) (B -> A)) -> Prop := fun _707808 : prod (Topology A) (Topology B) => fun _707809 : prod (A -> B) (B -> A) => (@continuous_map A B (@pair (Topology A) (Topology B) (@fst (Topology A) (Topology B) _707808) (@snd (Topology A) (Topology B) _707808)) (@fst (A -> B) (B -> A) _707809)) /\ ((@continuous_map B A (@pair (Topology B) (Topology A) (@snd (Topology A) (Topology B) _707808) (@fst (Topology A) (Topology B) _707808)) (@snd (A -> B) (B -> A) _707809)) /\ (forall x : B, (@IN B x (@topspace B (@snd (Topology A) (Topology B) _707808))) -> (@fst (A -> B) (B -> A) _707809 (@snd (A -> B) (B -> A) _707809 x)) = x)).
Lemma retraction_maps_def {A B : Type'} : (@retraction_maps A B) = (fun _707808 : prod (Topology A) (Topology B) => fun _707809 : prod (A -> B) (B -> A) => (@continuous_map A B (@pair (Topology A) (Topology B) (@fst (Topology A) (Topology B) _707808) (@snd (Topology A) (Topology B) _707808)) (@fst (A -> B) (B -> A) _707809)) /\ ((@continuous_map B A (@pair (Topology B) (Topology A) (@snd (Topology A) (Topology B) _707808) (@fst (Topology A) (Topology B) _707808)) (@snd (A -> B) (B -> A) _707809)) /\ (forall x : B, (@IN B x (@topspace B (@snd (Topology A) (Topology B) _707808))) -> (@fst (A -> B) (B -> A) _707809 (@snd (A -> B) (B -> A) _707809 x)) = x))).
Proof. exact (eq_refl (@retraction_maps A B)). Qed.
Definition section_map {A B : Type'} : (prod (Topology A) (Topology B)) -> (A -> B) -> Prop := fun _707830 : prod (Topology A) (Topology B) => fun _707831 : A -> B => exists g : B -> A, @retraction_maps B A (@pair (Topology B) (Topology A) (@snd (Topology A) (Topology B) _707830) (@fst (Topology A) (Topology B) _707830)) (@pair (B -> A) (A -> B) g _707831).
Lemma section_map_def {A B : Type'} : (@section_map A B) = (fun _707830 : prod (Topology A) (Topology B) => fun _707831 : A -> B => exists g : B -> A, @retraction_maps B A (@pair (Topology B) (Topology A) (@snd (Topology A) (Topology B) _707830) (@fst (Topology A) (Topology B) _707830)) (@pair (B -> A) (A -> B) g _707831)).
Proof. exact (eq_refl (@section_map A B)). Qed.
Definition retraction_map {A B : Type'} : (prod (Topology A) (Topology B)) -> (A -> B) -> Prop := fun _707847 : prod (Topology A) (Topology B) => fun _707848 : A -> B => exists g : B -> A, @retraction_maps A B (@pair (Topology A) (Topology B) (@fst (Topology A) (Topology B) _707847) (@snd (Topology A) (Topology B) _707847)) (@pair (A -> B) (B -> A) _707848 g).
Lemma retraction_map_def {A B : Type'} : (@retraction_map A B) = (fun _707847 : prod (Topology A) (Topology B) => fun _707848 : A -> B => exists g : B -> A, @retraction_maps A B (@pair (Topology A) (Topology B) (@fst (Topology A) (Topology B) _707847) (@snd (Topology A) (Topology B) _707847)) (@pair (A -> B) (B -> A) _707848 g)).
Proof. exact (eq_refl (@retraction_map A B)). Qed.
Definition retract_of_space {A : Type'} : (A -> Prop) -> (Topology A) -> Prop := fun _713400 : A -> Prop => fun _713401 : Topology A => (@SUBSET A _713400 (@topspace A _713401)) /\ (exists r : A -> A, (@continuous_map A A (@pair (Topology A) (Topology A) _713401 (@subtopology A _713401 _713400)) r) /\ (forall x : A, (@IN A x _713400) -> (r x) = x)).
Lemma retract_of_space_def {A : Type'} : (@retract_of_space A) = (fun _713400 : A -> Prop => fun _713401 : Topology A => (@SUBSET A _713400 (@topspace A _713401)) /\ (exists r : A -> A, (@continuous_map A A (@pair (Topology A) (Topology A) _713401 (@subtopology A _713401 _713400)) r) /\ (forall x : A, (@IN A x _713400) -> (r x) = x))).
Proof. exact (eq_refl (@retract_of_space A)). Qed.
Definition compact_in {A : Type'} : (Topology A) -> (A -> Prop) -> Prop := fun _714179 : Topology A => fun _714180 : A -> Prop => (@SUBSET A _714180 (@topspace A _714179)) /\ (forall U : (A -> Prop) -> Prop, ((forall u : A -> Prop, (@IN (A -> Prop) u U) -> @open_in A _714179 u) /\ (@SUBSET A _714180 (@UNIONS A U))) -> exists V : (A -> Prop) -> Prop, (@FINITE (A -> Prop) V) /\ ((@SUBSET (A -> Prop) V U) /\ (@SUBSET A _714180 (@UNIONS A V)))).
Lemma compact_in_def {A : Type'} : (@compact_in A) = (fun _714179 : Topology A => fun _714180 : A -> Prop => (@SUBSET A _714180 (@topspace A _714179)) /\ (forall U : (A -> Prop) -> Prop, ((forall u : A -> Prop, (@IN (A -> Prop) u U) -> @open_in A _714179 u) /\ (@SUBSET A _714180 (@UNIONS A U))) -> exists V : (A -> Prop) -> Prop, (@FINITE (A -> Prop) V) /\ ((@SUBSET (A -> Prop) V U) /\ (@SUBSET A _714180 (@UNIONS A V))))).
Proof. exact (eq_refl (@compact_in A)). Qed.
Definition compact_space {A : Type'} : (Topology A) -> Prop := fun _714191 : Topology A => @compact_in A _714191 (@topspace A _714191).
Lemma compact_space_def {A : Type'} : (@compact_space A) = (fun _714191 : Topology A => @compact_in A _714191 (@topspace A _714191)).
Proof. exact (eq_refl (@compact_space A)). Qed.
Definition separated_in {_389322 : Type'} : (Topology _389322) -> (_389322 -> Prop) -> (_389322 -> Prop) -> Prop := fun _727300 : Topology _389322 => fun _727301 : _389322 -> Prop => fun _727302 : _389322 -> Prop => (@SUBSET _389322 _727301 (@topspace _389322 _727300)) /\ ((@SUBSET _389322 _727302 (@topspace _389322 _727300)) /\ (((@INTER _389322 _727301 (@closure_of _389322 _727300 _727302)) = (@EMPTY _389322)) /\ ((@INTER _389322 _727302 (@closure_of _389322 _727300 _727301)) = (@EMPTY _389322)))).
Lemma separated_in_def {_389322 : Type'} : (@separated_in _389322) = (fun _727300 : Topology _389322 => fun _727301 : _389322 -> Prop => fun _727302 : _389322 -> Prop => (@SUBSET _389322 _727301 (@topspace _389322 _727300)) /\ ((@SUBSET _389322 _727302 (@topspace _389322 _727300)) /\ (((@INTER _389322 _727301 (@closure_of _389322 _727300 _727302)) = (@EMPTY _389322)) /\ ((@INTER _389322 _727302 (@closure_of _389322 _727300 _727301)) = (@EMPTY _389322))))).
Proof. exact (eq_refl (@separated_in _389322)). Qed.
Definition t1_space {_390503 : Type'} : (Topology _390503) -> Prop := fun _729444 : Topology _390503 => forall x : _390503, forall y : _390503, ((@IN _390503 x (@topspace _390503 _729444)) /\ ((@IN _390503 y (@topspace _390503 _729444)) /\ (~ (x = y)))) -> exists u : _390503 -> Prop, (@open_in _390503 _729444 u) /\ ((@IN _390503 x u) /\ (~ (@IN _390503 y u))).
Lemma t1_space_def {_390503 : Type'} : (@t1_space _390503) = (fun _729444 : Topology _390503 => forall x : _390503, forall y : _390503, ((@IN _390503 x (@topspace _390503 _729444)) /\ ((@IN _390503 y (@topspace _390503 _729444)) /\ (~ (x = y)))) -> exists u : _390503 -> Prop, (@open_in _390503 _729444 u) /\ ((@IN _390503 x u) /\ (~ (@IN _390503 y u)))).
Proof. exact (eq_refl (@t1_space _390503)). Qed.
Definition hausdorff_space {A : Type'} : (Topology A) -> Prop := fun _730627 : Topology A => forall x : A, forall y : A, ((@IN A x (@topspace A _730627)) /\ ((@IN A y (@topspace A _730627)) /\ (~ (x = y)))) -> exists u : A -> Prop, exists v : A -> Prop, (@open_in A _730627 u) /\ ((@open_in A _730627 v) /\ ((@IN A x u) /\ ((@IN A y v) /\ (@DISJOINT A u v)))).