summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKathy Gray2013-12-18 14:13:27 +0000
committerKathy Gray2013-12-18 14:13:27 +0000
commit308dd94ea6428d58c810546a1803722f6e4c0eef (patch)
tree7e0ddeb792deb488b526830211387ffcd9a99c9e
parent0742e0acc1558c6933be2d524f8a5ac13a5a8a19 (diff)
More lem homs
-rw-r--r--language/l2_rules.ott113
1 files changed, 68 insertions, 45 deletions
diff --git a/language/l2_rules.ott b/language/l2_rules.ott
index d865d0ed..71a9b368 100644
--- a/language/l2_rules.ott
+++ b/language/l2_rules.ott
@@ -1,8 +1,47 @@
-grammar
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Machinery for typing rules %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+embed
+{{ lem
+
+let blength (bit) = Ne_const 8
+let hlength (bit) = Ne_const 8
+
+%% %% let rec sumation_nes nes = match nes with
+%% %% | [ a; b] -> Ne_add a b
+%% %% | x :: y -> Ne_add x (sumation_nes y)
+%% %% end
+%% %%
+
+ type definition_type =
+ | DenvEmp
+ | Denv of (map tid kinf) (map ... ...) (map ... ...)
+
+ type env =
+ | EnvEmp
+ | Env of (map x v_desc) * definition_type
+
+ val denv_union : definition_type -> definition_type -> definition_type
+ let denv_union de1 de2 =
+ match (de1,de2) with
+ | (DenvEmp,de2) -> de2
+ | (de1,DenvEmp) -> de1
+ | ((Denv ke1 re1 ee1),(Denv ke2 re2 ee2)) ->
+ Denv (union_map ke1 ke2) (union_map re1 re2) (union_map ee1 ee2)
+ end
+
+ val env_union : env -> env -> env
+ let env_union e1 e2 =
+ match (e1,e2) with
+ | (EnvEmp,e2) -> e2
+ | (e1,EnvEmp) -> e1
+ | ((Env te1 de1),(Env te2 de2)) ->
+ Env (union_map te1 te2) (denv_union de1 de2)
+ end
+}}
+
grammar
@@ -77,37 +116,6 @@ ne :: 'Ne_' ::=
| ne >= ne' :: :: gteq
| kid 'IN' { num1 , ... , numn } :: :: in
-%%embed
-%%{{ lem
-%%
-%%let blength (bit) = Ne_const 8
-%%let hlength (bit) = Ne_const 8
-
-%% %% let rec sumation_nes nes = match nes with
-%% %% | [ a; b] -> Ne_add a b
-%% %% | x :: y -> Ne_add x (sumation_nes y)
-%% %% end
-%% %%
-
-%% type definition_type =
-%% | DenvEmp
-%% | Denv of (map tid k_inf)
-%%
-%% type env =
-%% | EnvEmp
-%% | Env of (map x v_desc) * definition_type
-
-%% %%
-%% %% val env_union : env -> env -> env
-%% %% let env_union e1 e2 =
-%% %% match (e1,e2) with
-%% %% | (EnvEmp,e2) -> e2
-%% %% | (e1,EnvEmp) -> e1
-%% %% | ((Env Em1 Ep1 Ef1 Ev1),(Env Em2 Ep2 Ef2 Ev2)) ->
-%% %% Env(union_map Em1 Em2) (union_map Ep1 Ep2) (union_map Ef1 Ef2) (union_map Ev1 Ev2)
-%% %% end
-%%}}
-
S_N {{ tex {\Sigma^{\textsc{N} } } }} :: '' ::= {{ phantom }}
{{ hol nec list }}
{{ lem list nec }}
@@ -147,12 +155,19 @@ S_N {{ tex {\Sigma^{\textsc{N} } } }} :: '' ::= {{ phantom }}
{{ lem EnvEmp }}
{{ ocaml assert false }}
| E u+ E' :: :: E_union
+ {{ lem (env_union [[E]] [[E']]) }}
E_d {{ tex {\ottnt{E}^{\textsc{d} } } }} :: 'E_d_' ::=
{{ com Environments storing top level information, such as defined records, enumerations, and kinds }}
| < E_k , E_r , E_e > :: :: base
+ {{ hol arb }}
+ {{ lem (Denv [[E_k]] [[E_r]] [[E_e]]) }}
| empty :: :: empty
+ {{ hol arb }}
+ {{ lem DenvEmp }}
| E_d u+ E_d' :: :: union
+ {{ hol arb }}
+ {{ lem (denv_union [[E_d]] [[E_d']]) }}
kinf :: 'kinf_' ::=
{{ com Whether a kind is default or from a local binding }}
@@ -165,8 +180,8 @@ S_N {{ tex {\Sigma^{\textsc{N} } } }} :: '' ::= {{ phantom }}
| kid :: :: var
E_k {{ tex \ottnt{E}^{\textsc{k} } }} :: 'E_k_' ::= {{ phantom }}
- {{ hol (tid-> k) }}
- {{ lem map tid k }}
+ {{ hol (tid-> kinf) }}
+ {{ lem (map tid kinf) }}
{{ com Kind environments }}
| { tid1 |-> kinf1 , .. , tidn |-> kinfn } :: :: concrete
{{ hol (FOLDR (\(k1,k2) E. E |+ (k1,k2)) FEMPTY [[tid1 kinf1 .. tidn kinfn]]) }}
@@ -177,7 +192,9 @@ S_N {{ tex {\Sigma^{\textsc{N} } } }} :: '' ::= {{ phantom }}
{{ lem (List.fold_right union_map [[E_k1..E_kn]] Map.empty) }}
{{ ocaml (assert false) }}
| E_k u- E_k1 .. E_kn :: M :: multi_set_minus
- {{ hol arb }} {{ lem arb }} {{ ocaml assert false }}
+ {{ hol arb }}
+ {{ lem (remove_from [[E_k]] (List.fold_right union_map [[E_k1..E_kn]] Map.empty)) }}
+ {{ ocaml assert false }}
tinf :: 'tinf_' ::=
@@ -185,7 +202,7 @@ S_N {{ tex {\Sigma^{\textsc{N} } } }} :: '' ::= {{ phantom }}
| t :: :: typ
| E_k , S_N , tag , t :: :: quant_typ
- E_t {{ tex {\ottnt{E}^{\textsc{t} } } }} :: 'E_t_' ::= {{ phantom }}
+ E_t {{ tex {\ottnt{E}^{\textsc{t} } } }} :: 'E_t_' ::= {{ phantom }}
{{ hol (id |-> tinf) }}
{{ lem map x f_desc }}
{{ com Type environments }}
@@ -198,45 +215,51 @@ S_N {{ tex {\Sigma^{\textsc{N} } } }} :: '' ::= {{ phantom }}
{{ ocaml (assert false) }}
| u+ E_t1 .. E_tn :: M :: multi_union
{{ hol arb }}
- {{ lem arb }}
+ {{ lem (List.fold_right union_map [[E_t1..E_tn]] Map.empty) }}
{{ ocaml assert false }}
| E_t u- E_t1 .. E_tn :: M :: multi_set_minus
- {{ hol arb }} {{ lem arb }} {{ ocaml assert false }}
+ {{ hol arb }} {{ lem (remove_from [[E_t]] (List.fold_right union_map [[E_t1..E_tn]] Map.empty)) }} {{ ocaml assert false }}
| ( E_t1 inter .... inter E_tn ) :: M :: intersect
{{ hol arb }}
- {{ lem syntax error }}
+ {{ lem (List.fold_right intersect_map [[E_t1....E_tn]] Map.empty) }}
{{ ocaml (assert false) }}
| inter E_t1 .. E_tn :: M :: multi_inter
{{ hol arb }}
- {{ lem arb }}
+ {{ lem (List.fold_right intersect_map [[E_t1..E_tn]] Map.empty) }}
{{ ocaml assert false }}
field_typs :: 'FT_' ::= {{ phantom }}
+ {{ lem list (id * t) }}
{{ com Record fields }}
| id1 : t1 , .. , idn : tn :: :: fields
E_r {{ tex \ottnt{E}^{\textsc{r} } }} :: 'E_r_' ::= {{ phantom }}
- {{ hol (id |-> t) }}
- {{ lem map x f_desc }}
+ {{ hol (id*t) |-> tinf) }}
+ {{ lem map (list (id*t)) tinf }}
{{ com Record environments }}
| { { field_typs1 } |-> tinf1 , .. , { field_typsn } |-> tinfn } :: :: concrete
{{ hol (FOLDR (\x E. E |+ x) FEMPTY) }}
- {{ lem (List.fold_right (fun (x,f) m -> Map.insert x f m) Map.empty) }}
+ {{ lem (List.fold_right (fun (x,f) m -> Map.insert x f m) [[field_typs1 tinf1..field_typsn tinfn]] Map.empty) }}
| E_r1 u+ .. u+ E_rn :: M :: union
{{ hol (FOLDR FUNION FEMPTY [[E_r1..E_rn]]) }}
{{ lem (List.fold_right union_map [[E_r1..E_rn]] Map.empty) }}
{{ ocaml (assert false) }}
- enumerate_map :: '' ::=
+ enumerate_map :: '' ::= {{ phantom }}
+ {{ lem (list (num*id)) }}
| { num1 |-> id1 ... numn |-> idn } :: :: enum_map
- E_e {{ tex \ottnt{E}^{\textsc{e} } }} :: 'E_e_' ::=
+ E_e {{ tex \ottnt{E}^{\textsc{e} } }} :: 'E_e_' ::= {{ phantom }}
+ {{ lem (map t (list (num*id))) }}
{{ com Enumeration environments }}
| { t1 |-> enumerate_map1 , .. , tn |-> enumerate_mapn } :: :: base
+ {{ lem (List.fold_right (fun (x,f) m -> Map.insert x f m) [[t1 enumerate_map1..tn enumerate_mapn]] Map.empty) }}
| E_e1 u+ .. u+ E_en :: :: union
+ {{ lem (List.fold_right union_map [[E_e1..E_en]] Map.empty) }}
ts :: ts_ ::= {{ phantom }}
+ {{ lem list t }}
| t1 , .. , tn :: :: lst
formula :: formula_ ::=