@@ -37,7 +37,7 @@ data Num : sort 0 where {
37
37
38
38
Num_rec : (p: Num -> sort 1) -> ((n:Nat) -> p (TCNum n)) -> p TCInf ->
39
39
(n:Num) -> p n;
40
- Num_rec p f1 f2 n = Num#rec p f1 f2 n;
40
+ Num_rec p f1 f2 n = Num#rec1 p f1 f2 n;
41
41
42
42
-- Check whether a 'Num' is finite
43
43
tcFin : Num -> Bool;
@@ -54,7 +54,7 @@ getFinNat n =
54
54
finNumRec : (p: Num -> isort 1) -> ((n:Nat) -> p (TCNum n)) ->
55
55
(n:Num) -> p n;
56
56
finNumRec p f n =
57
- Num#rec p f (error (p TCInf) "Unexpected Fin constraint violation!") n;
57
+ Num#rec1 p f (error (p TCInf) "Unexpected Fin constraint violation!") n;
58
58
59
59
-- Helper function: destruct two Nums that we expect to be finite
60
60
finNumRec2 : (p: Num -> Num -> isort 1) ->
@@ -219,7 +219,7 @@ tcLt = binaryNumPred ltNat (\ (x:Nat) -> True) (\ (y:Nat) -> False) True;
219
219
220
220
seq : Num -> sort 0 -> sort 0;
221
221
seq num a =
222
- Num#rec (\ (num:Num) -> sort 0) (\ (n:Nat) -> Vec n a) (Stream a) num;
222
+ Num#rec1 (\ (num:Num) -> sort 0) (\ (n:Nat) -> Vec n a) (Stream a) num;
223
223
224
224
-- FIXME: this rule should be derived by scDefRewriteRules
225
225
seq_TCNum : (n:Nat) -> (a:sort 0) -> Eq (sort 0) (seq (TCNum n) a) (Vec n a);
@@ -233,7 +233,7 @@ seqMap a b num f =
233
233
234
234
seqConst : (n : Num) -> (a : sort 0) -> a -> seq n a;
235
235
seqConst n =
236
- Num#rec (\ (n:Num) -> (a : sort 0) -> a -> seq n a) replicate streamConst n;
236
+ Num#rec1 (\ (n:Num) -> (a : sort 0) -> a -> seq n a) replicate streamConst n;
237
237
238
238
seqInhabited : (n:Num) -> (a: sort 0) -> (x:a) -> seq n a;
239
239
seqInhabited =
@@ -249,7 +249,7 @@ injectCode "Coq"
249
249
250
250
IntModNum : (num : Num) -> sort 0;
251
251
IntModNum num =
252
- Num#rec (\ (n : Num) -> sort 0) IntMod Integer num;
252
+ Num#rec1 (\ (n : Num) -> sort 0) IntMod Integer num;
253
253
254
254
-------------------------------------------------------------------------------
255
255
-- Rationals (TODO)
@@ -561,27 +561,27 @@ PEqIntMod n = { eq = intModEq n };
561
561
562
562
PEqIntModNum : (num : Num) -> PEq (IntModNum num);
563
563
PEqIntModNum num =
564
- Num#rec (\ (n : Num) -> PEq (IntModNum n)) PEqIntMod PEqInteger num;
564
+ Num#rec1 (\ (n : Num) -> PEq (IntModNum n)) PEqIntMod PEqInteger num;
565
565
566
566
PEqVec : (n : Nat) -> (a : isort 0) -> PEq a -> PEq (Vec n a);
567
567
PEqVec n a pa = { eq = vecEq n a pa.eq };
568
568
569
569
PEqSeq : (n : Num) -> (a : isort 0) -> PEq a -> PEq (seq n a);
570
570
PEqSeq n =
571
- Num#rec (\ (n:Num) -> (a : isort 0) -> PEq a -> PEq (seq n a))
572
- (\ (n:Nat) -> PEqVec n)
573
- (\ (a:isort 0) (pa : PEq a) -> error (PEq (Stream a)) "invalid Eq instance")
574
- n;
571
+ Num#rec1 (\ (n:Num) -> (a : isort 0) -> PEq a -> PEq (seq n a))
572
+ (\ (n:Nat) -> PEqVec n)
573
+ (\ (a:isort 0) (pa : PEq a) -> error (PEq (Stream a)) "invalid Eq instance")
574
+ n;
575
575
576
576
PEqWord : (n : Nat) -> PEq (Vec n Bool);
577
577
PEqWord n = { eq = bvEq n };
578
578
579
579
PEqSeqBool : (n : Num) -> PEq (seq n Bool);
580
580
PEqSeqBool n =
581
- Num#rec (\ (n : Num) -> PEq (seq n Bool))
582
- (\ (n:Nat) -> PEqWord n)
583
- (error (PEq (Stream Bool)) "invalid Eq instance")
584
- n;
581
+ Num#rec1 (\ (n : Num) -> PEq (seq n Bool))
582
+ (\ (n:Nat) -> PEqWord n)
583
+ (error (PEq (Stream Bool)) "invalid Eq instance")
584
+ n;
585
585
586
586
PEqUnit : PEq #();
587
587
PEqUnit = { eq = \ (x y : #()) -> True };
@@ -620,20 +620,20 @@ PCmpVec n a pa =
620
620
621
621
PCmpSeq : (n : Num) -> (a : isort 0) -> PCmp a -> PCmp (seq n a);
622
622
PCmpSeq n =
623
- Num#rec (\ (n:Num) -> (a : isort 0) -> PCmp a -> PCmp (seq n a))
624
- (\ (n:Nat) -> PCmpVec n)
625
- (\ (a:isort 0) (pa : PCmp a) -> error (PCmp (Stream a)) "invalid Cmp instance")
626
- n;
623
+ Num#rec1 (\ (n:Num) -> (a : isort 0) -> PCmp a -> PCmp (seq n a))
624
+ (\ (n:Nat) -> PCmpVec n)
625
+ (\ (a:isort 0) (pa : PCmp a) -> error (PCmp (Stream a)) "invalid Cmp instance")
626
+ n;
627
627
628
628
PCmpWord : (n : Nat) -> PCmp (Vec n Bool);
629
629
PCmpWord n = { cmpEq = PEqWord n, cmp = bvCmp n, le = bvule n, lt = bvult n };
630
630
631
631
PCmpSeqBool : (n : Num) -> PCmp (seq n Bool);
632
632
PCmpSeqBool n =
633
- Num#rec (\ (n : Num) -> PCmp (seq n Bool))
634
- (\ (n:Nat) -> PCmpWord n)
635
- (error (PCmp (Stream Bool)) "invalid Cmp instance")
636
- n;
633
+ Num#rec1 (\ (n : Num) -> PCmp (seq n Bool))
634
+ (\ (n:Nat) -> PCmpWord n)
635
+ (error (PCmp (Stream Bool)) "invalid Cmp instance")
636
+ n;
637
637
638
638
PCmpUnit : PCmp #();
639
639
PCmpUnit = { cmpEq = PEqUnit, cmp = unitCmp, le = unitLe, lt = unitLt };
@@ -667,20 +667,20 @@ PSignedCmpVec n a pa =
667
667
668
668
PSignedCmpSeq : (n : Num) -> (a : isort 0) -> PSignedCmp a -> PSignedCmp (seq n a);
669
669
PSignedCmpSeq n =
670
- Num#rec (\ (n:Num) -> (a : isort 0) -> PSignedCmp a -> PSignedCmp (seq n a))
671
- (\ (n:Nat) -> PSignedCmpVec n)
672
- (\ (a:isort 0) (pa : PSignedCmp a) -> error (PSignedCmp (Stream a)) "invalid SignedCmp instance")
673
- n;
670
+ Num#rec1 (\ (n:Num) -> (a : isort 0) -> PSignedCmp a -> PSignedCmp (seq n a))
671
+ (\ (n:Nat) -> PSignedCmpVec n)
672
+ (\ (a:isort 0) (pa : PSignedCmp a) -> error (PSignedCmp (Stream a)) "invalid SignedCmp instance")
673
+ n;
674
674
675
675
PSignedCmpWord : (n : Nat) -> PSignedCmp (Vec n Bool);
676
676
PSignedCmpWord n = { signedCmpEq = PEqWord n, scmp = bvSCmp n, sle = bvsle n, slt = bvslt n };
677
677
678
678
PSignedCmpSeqBool : (n : Num) -> PSignedCmp (seq n Bool);
679
679
PSignedCmpSeqBool n =
680
- Num#rec (\ (n : Num) -> PSignedCmp (seq n Bool))
681
- (\ (n:Nat) -> PSignedCmpWord n)
682
- (error (PSignedCmp (Stream Bool)) "invalid SignedCmp instance")
683
- n;
680
+ Num#rec1 (\ (n : Num) -> PSignedCmp (seq n Bool))
681
+ (\ (n:Nat) -> PSignedCmpWord n)
682
+ (error (PSignedCmp (Stream Bool)) "invalid SignedCmp instance")
683
+ n;
684
684
685
685
PSignedCmpUnit : PSignedCmp #();
686
686
PSignedCmpUnit = { signedCmpEq = PEqUnit, scmp = unitCmp, sle = unitLe, slt = unitLt };
@@ -712,17 +712,17 @@ PZeroRational : PZero Rational;
712
712
PZeroRational = integerToRational (natToInt 0);
713
713
714
714
PZeroIntModNum : (num : Num) -> PZero (IntModNum num);
715
- PZeroIntModNum num = Num#rec (\ (n : Num) -> PZero (IntModNum n)) PZeroIntMod PZeroInteger num;
715
+ PZeroIntModNum num = Num#rec1 (\ (n : Num) -> PZero (IntModNum n)) PZeroIntMod PZeroInteger num;
716
716
717
717
PZeroSeq : (n : Num) -> (a : sort 0) -> PZero a -> PZero (seq n a);
718
718
PZeroSeq n a pa = seqConst n a pa;
719
719
720
720
PZeroSeqBool : (n : Num) -> PZero (seq n Bool);
721
721
PZeroSeqBool n =
722
- Num#rec (\ (n:Num) -> PZero (seq n Bool))
723
- (\ (n:Nat) -> bvNat n 0)
724
- (streamConst Bool False)
725
- n;
722
+ Num#rec1 (\ (n:Num) -> PZero (seq n Bool))
723
+ (\ (n:Nat) -> bvNat n 0)
724
+ (streamConst Bool False)
725
+ n;
726
726
727
727
PZeroFun : (a b : sort 0) -> PZero b -> PZero (a -> b);
728
728
PZeroFun a b pb = (\(_ : a) -> pb);
@@ -767,10 +767,10 @@ PLogicStream a pa =
767
767
768
768
PLogicSeq : (n : Num) -> (a : isort 0) -> PLogic a -> PLogic (seq n a);
769
769
PLogicSeq n =
770
- Num#rec (\ (n:Num) -> (a:isort 0) -> PLogic a -> PLogic (seq n a))
771
- (\ (n:Nat) -> PLogicVec n)
772
- (\ (a:isort 0) -> PLogicStream a)
773
- n;
770
+ Num#rec1 (\ (n:Num) -> (a:isort 0) -> PLogic a -> PLogic (seq n a))
771
+ (\ (n:Nat) -> PLogicVec n)
772
+ (\ (a:isort 0) -> PLogicStream a)
773
+ n;
774
774
775
775
PLogicWord : (n : Nat) -> PLogic (Vec n Bool);
776
776
PLogicWord n =
@@ -783,8 +783,8 @@ PLogicWord n =
783
783
784
784
PLogicSeqBool : (n : Num) -> PLogic (seq n Bool);
785
785
PLogicSeqBool n =
786
- Num#rec (\ (n:Num) -> PLogic (seq n Bool))
787
- (\ (n:Nat) -> PLogicWord n) (PLogicStream Bool PLogicBit) n;
786
+ Num#rec1 (\ (n:Num) -> PLogic (seq n Bool))
787
+ (\ (n:Nat) -> PLogicWord n) (PLogicStream Bool PLogicBit) n;
788
788
789
789
PLogicFun : (a b : sort 0) -> PLogic b -> PLogic (a -> b);
790
790
PLogicFun a b pb =
@@ -847,7 +847,7 @@ PRingIntMod n =
847
847
848
848
PRingIntModNum : (num : Num) -> PRing (IntModNum num);
849
849
PRingIntModNum num =
850
- Num#rec (\ (n : Num) -> PRing (IntModNum n)) PRingIntMod PRingInteger num;
850
+ Num#rec1 (\ (n : Num) -> PRing (IntModNum n)) PRingIntMod PRingInteger num;
851
851
852
852
PRingRational : PRing Rational;
853
853
PRingRational =
@@ -881,10 +881,10 @@ PRingStream a pa =
881
881
882
882
PRingSeq : (n : Num) -> (a : isort 0) -> PRing a -> PRing (seq n a);
883
883
PRingSeq n =
884
- Num#rec (\ (n : Num) -> (a : isort 0) -> PRing a -> PRing (seq n a))
885
- (\ (n:Nat) -> PRingVec n)
886
- (\ (a:isort 0) -> PRingStream a)
887
- n;
884
+ Num#rec1 (\ (n : Num) -> (a : isort 0) -> PRing a -> PRing (seq n a))
885
+ (\ (n:Nat) -> PRingVec n)
886
+ (\ (a:isort 0) -> PRingStream a)
887
+ n;
888
888
889
889
PRingWord : (n : Nat) -> PRing (Vec n Bool);
890
890
PRingWord n =
@@ -898,10 +898,10 @@ PRingWord n =
898
898
899
899
PRingSeqBool : (n : Num) -> PRing (seq n Bool);
900
900
PRingSeqBool n =
901
- Num#rec (\ (n:Num) -> PRing (seq n Bool))
902
- (\ (n:Nat) -> PRingWord n)
903
- (error (PRing (Stream Bool)) "PRingSeqBool: no instance for streams")
904
- n;
901
+ Num#rec1 (\ (n:Num) -> PRing (seq n Bool))
902
+ (\ (n:Nat) -> PRingWord n)
903
+ (error (PRing (Stream Bool)) "PRingSeqBool: no instance for streams")
904
+ n;
905
905
906
906
PRingFun : (a b : sort 0) -> PRing b -> PRing (a -> b);
907
907
PRingFun a b pb =
@@ -971,10 +971,10 @@ PIntegralWord n =
971
971
972
972
PIntegralSeqBool : (n : Num) -> PIntegral (seq n Bool);
973
973
PIntegralSeqBool n =
974
- Num#rec (\ (n:Num) -> PIntegral (seq n Bool))
975
- (\ (n:Nat) -> PIntegralWord n)
976
- (error (PIntegral (Stream Bool)) "PIntegralSeqBool: no instance for streams")
977
- n;
974
+ Num#rec1 (\ (n:Num) -> PIntegral (seq n Bool))
975
+ (\ (n:Nat) -> PIntegralWord n)
976
+ (error (PIntegral (Stream Bool)) "PIntegralSeqBool: no instance for streams")
977
+ n;
978
978
979
979
980
980
-- Field class
@@ -1003,7 +1003,7 @@ PFieldIntMod n =
1003
1003
1004
1004
PFieldIntModNum : (n : Num) -> PField (IntModNum n);
1005
1005
PFieldIntModNum num =
1006
- Num#rec (\ (n : Num) -> PField (IntModNum n))
1006
+ Num#rec1 (\ (n : Num) -> PField (IntModNum n))
1007
1007
PFieldIntMod
1008
1008
(error (PField (IntModNum TCInf)) "PFieldIntModNum: no instance for inf")
1009
1009
num;
@@ -1047,8 +1047,8 @@ PLiteralLessThan a = Nat -> a;
1047
1047
1048
1048
PLiteralSeqBool : (n : Num) -> PLiteral (seq n Bool);
1049
1049
PLiteralSeqBool n =
1050
- Num#rec (\ (n : Num) -> PLiteral (seq n Bool)) bvNat
1051
- (error (PLiteral (Stream Bool)) "PLiteralSeqBool: no instance for streams") n;
1050
+ Num#rec1 (\ (n : Num) -> PLiteral (seq n Bool)) bvNat
1051
+ (error (PLiteral (Stream Bool)) "PLiteralSeqBool: no instance for streams") n;
1052
1052
1053
1053
PLiteralBit : PLiteral Bool;
1054
1054
PLiteralBit = Nat_cases Bool False (\ (n:Nat) -> \ (b:Bool) -> True);
@@ -1061,7 +1061,7 @@ PLiteralIntMod n = \ (x : Nat) -> toIntMod n (natToInt x);
1061
1061
1062
1062
PLiteralIntModNum : (num : Num) -> PLiteral (IntModNum num);
1063
1063
PLiteralIntModNum num =
1064
- Num#rec (\ (n : Num) -> PLiteral (IntModNum n)) PLiteralIntMod PLiteralInteger num;
1064
+ Num#rec1 (\ (n : Num) -> PLiteral (IntModNum n)) PLiteralIntMod PLiteralInteger num;
1065
1065
1066
1066
PLiteralRational : PLiteral Rational;
1067
1067
PLiteralRational = \ (x : Nat) -> error Rational "Unimplemented: Literal Rational";
@@ -1226,7 +1226,7 @@ ecFraction a = error a "Unimplemented: fraction";
1226
1226
ecShiftL : (m : Num) -> (ix a : sort 0) -> PIntegral ix -> PZero a ->
1227
1227
seq m a -> ix -> seq m a;
1228
1228
ecShiftL m =
1229
- Num#rec
1229
+ Num#rec1
1230
1230
(\ (m:Num) -> (ix a : sort 0) -> PIntegral ix -> PZero a -> seq m a -> ix -> seq m a)
1231
1231
1232
1232
-- Case for (TCNum m)
@@ -1246,7 +1246,7 @@ ecShiftL m =
1246
1246
ecShiftR : (m : Num) -> (ix a : sort 0) -> PIntegral ix -> PZero a ->
1247
1247
seq m a -> ix -> seq m a;
1248
1248
ecShiftR m =
1249
- Num#rec
1249
+ Num#rec1
1250
1250
(\ (m : Num) -> (ix a : sort 0) -> PIntegral ix -> PZero a -> seq m a -> ix -> seq m a)
1251
1251
1252
1252
-- Case for (TCNum m)
@@ -1343,7 +1343,7 @@ ecDrop =
1343
1343
1344
1344
ecJoin : (m n : Num) -> (a : isort 0) -> seq m (seq n a) -> seq (tcMul m n) a;
1345
1345
ecJoin m =
1346
- Num#rec
1346
+ Num#rec1
1347
1347
(\ (m:Num) -> (n:Num) -> (a:isort 0) -> seq m (seq n a) ->
1348
1348
seq (tcMul m n) a)
1349
1349
(\ (m:Nat) ->
@@ -1371,7 +1371,7 @@ ecJoin m =
1371
1371
ecSplit : (m n : Num) -> (a : isort 0) -> seq (tcMul m n) a ->
1372
1372
seq m (seq n a);
1373
1373
ecSplit m =
1374
- Num#rec
1374
+ Num#rec1
1375
1375
(\ (m:Num) -> (n:Num) -> (a:isort 0) -> seq (tcMul m n) a ->
1376
1376
seq m (seq n a))
1377
1377
(\ (m:Nat) ->
@@ -1432,7 +1432,7 @@ ecTranspose m n a =
1432
1432
1433
1433
ecAt : (n : Num) -> (a : isort 0) -> (ix: sort 0) -> PIntegral ix -> seq n a -> ix -> a;
1434
1434
ecAt n =
1435
- Num#rec
1435
+ Num#rec1
1436
1436
(\ (n:Num) -> (a:isort 0) -> (ix: sort 0) -> PIntegral ix -> seq n a -> ix -> a)
1437
1437
(\ (n:Nat) -> \ (a:isort 0) -> \ (ix:sort 0) -> \ (pix:PIntegral ix) -> \ (xs:Vec n a) ->
1438
1438
pix.posNegCases a
@@ -1770,7 +1770,7 @@ fpSqrt e p r x = error (TCFloat e p) "Unimplemented: fpSqrt";
1770
1770
-- Array update
1771
1771
ecUpdate : (n : Num) -> (a:isort 0) -> (ix: sort 0) -> PIntegral ix -> seq n a -> ix -> a -> seq n a;
1772
1772
ecUpdate n =
1773
- Num#rec
1773
+ Num#rec1
1774
1774
(\ (n:Num) -> (a:isort 0) -> (ix : sort 0) -> PIntegral ix -> seq n a -> ix -> a -> seq n a)
1775
1775
(\ (n:Nat) -> \ (a:isort 0) -> \ (ix : sort 0) -> \ (pix:PIntegral ix) -> \ (xs : Vec n a) ->
1776
1776
-- Case for (TCNum n, TCNum w)
0 commit comments