summaryrefslogtreecommitdiff
path: root/language
diff options
context:
space:
mode:
authorKathy Gray2013-10-22 22:39:30 +0100
committerKathy Gray2013-10-22 22:39:30 +0100
commit287a2910b9790620e68747d3048e12c92cd38b71 (patch)
treedb57b808e6d6790f08cf3441af69a4918c956528 /language
parentca26268ffba1cc21c0db4767980b133df6db84fe (diff)
More type system
Diffstat (limited to 'language')
-rw-r--r--language/l2_rules.ott54
1 files changed, 43 insertions, 11 deletions
diff --git a/language/l2_rules.ott b/language/l2_rules.ott
index fdd81c96..7d05457e 100644
--- a/language/l2_rules.ott
+++ b/language/l2_rules.ott
@@ -524,17 +524,42 @@ length(exp1 ... expn) = num
------------------------------------------------------------ :: vector
E |- [ exp1 , ... , expn ] : vector zero num inc t gives I1 u+ ... u+ In
-%% % TD,E,E_l |- exp : __vector ne' t gives S_c,S_N
-%% % |- nexp ~> ne
-%% % ------------------------------------------------------------- :: vectorget
-%% % TD,E,E_l |- exp .( nexp ) : t gives S_c,S_N union {ne<ne'}
-%% %
-%% % TD,E,E_l |- exp : __vector ne' t gives S_c,S_N
-%% % |- nexp1 ~> ne1
-%% % |- nexp2 ~> ne2
-%% % ne = :Ne_add: ne2 + (- ne1)
-%% % ------------------------------------------------------------- :: vectorsub
-%% % TD,E,E_l |- exp .( nexp1 .. nexp2 ) : __vector ne t gives S_c,S_N union {ne1 < ne2 < ne'}
+E |- exp1 : vector ne ne' inc t gives I1
+E |- exp2 : enum ne2 ne2' inc gives I2
+------------------------------------------------------------- :: vectorgetInc
+E |- :E_vector_access: exp1 [ exp2 ] : t gives I1 u+ I2 u+ <{ne<=ne2,ne2+ne2'<=ne+ne'},pure,None>
+
+E |- exp1 : vector ne ne' dec t gives I1
+E |- exp2 : enum ne2 ne'2 dec gives I2
+------------------------------------------------------------- :: vectorgetDec
+E |- :E_vector_access: exp1 [ exp2 ] : t gives I1 u+ I2 u+ <{ne>=ne2,ne2+(-ne2')<=ne+(-ne')},pure,None>
+
+E |- exp1 : vector ne ne' order t gives I1
+E |- exp2 : enum ne2 ne'2 order gives I2
+E |- exp3 : enum ne3 ne'3 order gives I3
+------------------------------------------------------------- :: vectorsub
+E |- :E_vector_subrange: exp1[ exp2 : exp3 ] : vector :t_arg_nexp: id :t_arg_nexp: id' order t gives I1 u+ I2 u+ I3 u+ <{ne <= ne2, id >= ne2 , id <= ne2+ne2', ne2+ne'2<=ne3, ne+ne'>=ne3+ne'3, id' <=ne3 + ne'3},pure,None>
+
+E |- exp : vector ne1 ne2 order t gives I
+E |- exp1 : enum ne3 ne4 order gives I1
+E |- exp2 : t gives I2
+------------------------------------------------------------ :: vectorup
+E |- [ exp with exp1 = exp2 ] : vector ne1 ne2 order t gives I u+ I1 u+ I2 u+ <{ne1 <= ne3, ne1 + ne2 >= ne3 + ne4},pure,None>
+
+E |- exp : vector ne1 ne2 order t gives I
+E |- exp1 : enum ne3 ne4 order gives I1
+E |- exp2 : enum ne5 ne6 order gives I2
+E |- exp3 : vector ne7 ne8 order t gives I3
+------------------------------------------------------------ :: vecrangeup
+E |- [ exp with exp1 : exp2 = exp3 ] : vector ne1 ne2 order t gives I u+ I1 u+ I2 u+ I3 u+ <{ne1 <= ne3, ne1 <= ne5,ne3+ne4 <= ne5, ne1 + ne2 <= ne5 + ne6 + (- ne3) + (- ne4), ne7 + ne8 = ne1 + ne2 + (- ne3) + (- ne4)},pure,None>
+
+E |- exp : vector ne1 ne2 order t gives I
+E |- exp1 : enum ne3 ne4 order gives I1
+E |- exp2 : enum ne5 ne6 order gives I2
+E |- exp3 : t gives I3
+------------------------------------------------------------ :: vecrangeupvalue
+E |- [ exp with exp1 : exp2 = exp3 ] : vector ne1 ne2 order t gives I u+ I1 u+ I2 u+ I3 u+ <{ne1 <= ne3, ne1 <= ne5,ne3+ne4 <= ne5, ne1 + ne2 <= ne5 + ne6 + (- ne3) + (- ne4)},pure,None>
+
E_r (id t_args) gives </idi : ti//i/> id : t </id'j : t'j//j/>
<E_t,E_r,E_k> |- exp : id t_args gives I
@@ -572,6 +597,13 @@ E |- exp3 : t gives I3
------------------------------------------------------------ :: if
E |- if exp1 then exp2 else exp3 : t gives I1 u+ I2 u+ I3
+<E_t,E_r,E_k> |- exp1 : enum ne1 ne2 order gives I1
+<E_t,E_r,E_k> |- exp2 : enum ne3 ne4 order gives I2
+<E_t,E_r,E_k> |- exp3 : enum ne5 ne6 order gives I3
+<E_t u+ {id |-> enum ne1 ne3+ne4 order},E_r,E_k> |- exp4 : t gives I4
+----------------------------------------------------------- :: for
+<E_t,E_r,E_k> |- foreach id from exp1 to exp2 by exp3 exp4 : t gives I1 u+ I2 u+ I3 u+ I4 u+ <{ne1 <= ne3+ne4},pure,None>
+
E |- exp1 : t gives I1
E |- exp2 : list t gives I2
------------------------------------------------------------ :: cons