struct: complex example synt, too many wars to chek full synt

This commit is contained in:
ProgramSnail 2026-05-12 19:07:35 +00:00
parent 279a548a58
commit 783260b38c

View file

@ -21,7 +21,7 @@ open Mode
StEnv.ground GT.list with show StEnv.ground GT.list with show
@type answerCpCap = @type answerCpCap =
CopyCap.ground GT.list with show CopyCap.ground GT.list with show
@type answerCpCapVec = @type answerCpCapList =
(CopyCap.ground GT.list) GT.list with show (CopyCap.ground GT.list) GT.list with show
(* - shortcuts *) (* - shortcuts *)
@ -655,6 +655,11 @@ let prog_eval_compl_test_send _ = show(answer) (Stream.take (run q
prog_evalo prog q }) prog_evalo prog q })
(fun q -> q#reify (StEnv.prj_exn)))) (fun q -> q#reify (StEnv.prj_exn))))
let rw_unitTo tp = ocanren {
(* fresh r, w in *)
tp == UnitT (Rd, AlwaysWr)
}
let any_unitTo tp = ocanren { let any_unitTo tp = ocanren {
fresh r, w in fresh r, w in
tp == UnitT (r, w) tp == UnitT (r, w)
@ -662,40 +667,40 @@ let any_unitTo tp = ocanren {
let any_user_utilsTo tp = ocanren { let any_user_utilsTo tp = ocanren {
fresh x, y in fresh x, y in
any_unitTo x & rw_unitTo x &
any_unitTo y & rw_unitTo y &
tp == TupleT [x; y] tp == TupleT [x; y]
} }
let any_user_infoTo tp = ocanren { let any_user_infoTo tp = ocanren {
fresh x, y, z in fresh x, y, z in
any_unitTo x & rw_unitTo x &
any_unitTo y & rw_unitTo y &
any_unitTo z & rw_unitTo z &
tp == TupleT [x; y; z] tp == TupleT [x; y; z]
} }
let any_versionTo tp = ocanren { let any_versionTo tp = ocanren {
fresh x, y, z in fresh x, y, z in
any_unitTo x & rw_unitTo x &
any_unitTo y & rw_unitTo y &
any_unitTo z & rw_unitTo z &
tp == TupleT [x; y; z] tp == TupleT [x; y; z]
} }
let any_utilsTo tp = ocanren { let any_utilsTo tp = ocanren {
fresh x, y in fresh x, y in
any_unitTo x & rw_unitTo x &
any_unitTo y & rw_unitTo y &
tp == TupleT [x; y] tp == TupleT [x; y]
} }
let any_dataTo tp = ocanren { let any_dataTo tp = ocanren {
any_unitTo tp rw_unitTo tp
} }
let any_op_dateTo tp = ocanren { let any_op_dateTo tp = ocanren {
any_unitTo tp rw_unitTo tp
} }
let any_userTo cu ci tp = ocanren { let any_userTo cu ci tp = ocanren {
@ -730,14 +735,14 @@ let any_boxed_moded_requestTo tp = ocanren {
} }
(* TODO: synt all modifiers, etc *) (* TODO: synt all modifiers, etc *)
let prog_synt_compl_test_send _ = show(answerCpCap) (Stream.take (run q let prog_synt_compl_test_send _ = show(answerCpCapList) (Stream.take (run q
(fun q -> ocanren { (fun q -> ocanren {
fresh (* types *) fresh (* types *)
uT_r_aw, uT_r_aw,
user_utilsT, user_infoT, user_utilsT, user_infoT,
userT, versionT, utilsT, userT, versionT, utilsT,
requestT, requestT,
moded_requestT, (* moded_requestT, *)
(* global vars init exprs *) (* global vars init exprs *)
user_utilsE, user_infoE, user_utilsE, user_infoE,
userE, versionE, utilsE, userE, versionE, utilsE,
@ -762,19 +767,14 @@ let prog_synt_compl_test_send _ = show(answerCpCap) (Stream.take (run q
(* synt *) (* synt *)
st in st in
(* types *) (* types *)
uT_r_aw == UnitT (Rd, AlwaysWr) & any_unitTo uT_r_aw &
user_utilsT == TupleT [uT_r_aw (* 0 id *); uT_r_aw] & any_user_utilsTo user_utilsT &
user_infoT == TupleT [uT_r_aw (* 0 name *); uT_r_aw; uT_r_aw] & any_user_infoTo user_infoT &
userT == TupleT [RefT (q, user_utilsT) (* 0 utils *); any_userTo Cp Cp userT &
RefT (Cp, user_infoT) (* 1 info *)] & any_versionTo versionT &
versionT == TupleT [uT_r_aw (* 0 id *); uT_r_aw; uT_r_aw] & any_utilsTo utilsT &
utilsT == TupleT [uT_r_aw (* 0 has_version *); uT_r_aw (* 1 id *)] & any_requestTo Cp Cp Cp Cp Cp Cp requestT &
requestT == TupleT [RefT (Cp, userT) (* 0 user *); (* moded_requestTo moded_requestT & *)
RefT (Cp, versionT) (* 1 version *);
RefT (Cp, utilsT) (* 2 utils *);
RefT (Cp, uT_r_aw) (* 3 data *);
uT_r_aw (* 4 operation_date *)] &
moded_requestT == (Mode (In, NOut), requestT) &
(* global vars init exprs *) (* global vars init exprs *)
user_utilsE == TupleE [UnitE (* 0 id *); UnitE] & user_utilsE == TupleE [UnitE (* 0 id *); UnitE] &
user_infoE == TupleE [UnitE (* 0 name *); UnitE; UnitE] & user_infoE == TupleE [UnitE (* 0 name *); UnitE; UnitE] &
@ -848,6 +848,17 @@ let prog_synt_compl_test_send _ = show(answerCpCap) (Stream.take (run q
)] )]
send_allF & send_allF &
fresh mrT_gvi, mrT_uv, mrT_s, mrT_sa in
fresh gvi_c0, gvi_c1, gvi_c2, gvi_c3, gvi_c4, gvi_c5, mrT' in
any_moded_requestTo gvi_c0 gvi_c1 gvi_c2 gvi_c3 gvi_c4 gvi_c5 mrT' &
(* TODO *)
(* any_moded_requestTo Cp Cp Cp Cp Cp Cp mrT_gvi & *)
(* any_moded_requestTo Cp Cp Cp Cp Cp Cp mrT_uv & *)
(* any_moded_requestTo Cp Cp Cp Cp Cp Cp mrT_s & *)
(* any_moded_requestTo Cp Cp Cp Cp Cp Cp mrT_sa & *)
q == [gvi_c0; gvi_c1; gvi_c2; gvi_c3; gvi_c4; gvi_c5] &
prog == Prg ([ prog == Prg ([
VarD (user_utilsT, user_utilsE); VarD (user_utilsT, user_utilsE);
VarD (user_infoT, user_infoE); VarD (user_infoT, user_infoE);
@ -856,13 +867,17 @@ let prog_synt_compl_test_send _ = show(answerCpCap) (Stream.take (run q
VarD (utilsT, utilsE); VarD (utilsT, utilsE);
VarD (uT_r_aw, UnitE); (* data *) VarD (uT_r_aw, UnitE); (* data *)
VarD (requestT, requestE); VarD (requestT, requestE);
FunD ([moded_requestT], get_version_idF); FunD ([mrT'], get_version_idF);
FunD ([moded_requestT], updated_versionF); FunD ([mrT'], updated_versionF);
FunD ([moded_requestT], sendF); FunD ([mrT'], sendF);
FunD ([moded_requestT], send_allF) FunD ([mrT'], send_allF)
(* FunD ([mrT_gvi], get_version_idF); *)
(* FunD ([mrT_uv], updated_versionF); *)
(* FunD ([mrT_s], sendF); *)
(* FunD ([mrT_sa], send_allF) *)
], ],
(* SkipS *) (* SkipS *)
CallS (VarP send_allID, [PathE (VarP requestID)]) CallS (VarP send_allID, [PathE (VarP requestID)])
) & ) &
prog_evalo prog st }) prog_evalo prog st })
(fun q -> q#reify (CopyCap.prj_exn)))) (* TODO: list *) (fun q -> q#reify (List.prj_exn CopyCap.prj_exn)))) (* TODO: list *)