Thm* A:ioa{i:l}(), I:Fmla, rho:Decl, de:sig(), e:{[[de]] rho}, te:(Label![](FONT/dash.png) Label![](FONT/dash.png) ![](FONT/then_med.png) ). tc_ioa(A;de) ![](FONT/eq.png) ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;te;I) ![](FONT/eq.png) guarded_trace(A.da;te;I) ![](FONT/eq.png) tc_pred(I;A.ds; < > ;de) ![](FONT/eq.png) covers_pred(A;I) ![](FONT/eq.png) closed_pred(I) ![](FONT/eq.png) single_valued_decls(A.ds) ![](FONT/eq.png) let M = [[A]] rho de e in ( s:M.state, tr:( [[A.da]] rho) List. (M -tr- > s) ![](FONT/eq.png) [[VCs(A;I)]] rho A.ds A.da de e s mk_trace_env(tr, te)) ![](FONT/eq.png) (M |= always s,tr.[[I]] rho A.ds < > de e s mk_trace_env(tr, te)) | [vc_trace_correctness] |
Thm* A:ioa{i:l}(), I:Fmla, rho:Decl, te:(Label![](FONT/dash.png) Label![](FONT/dash.png) ![](FONT/then_med.png) ). ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;te;I) ![](FONT/eq.png) ( v VCs(A;I).trace_consistent_vc(rho;A.da;te;v)) | [trace_consistent_ioa_inv_vc] |
Thm* A:ioa{i:l}(), I:Fmla, rho:Decl, de:sig(), e:{[[de]] rho}, te:(Label![](FONT/dash.png) Label![](FONT/dash.png) ![](FONT/then_med.png) ). tc_ioa(A;de) ![](FONT/eq.png) ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;te;I) ![](FONT/eq.png) tc_pred(I;A.ds; < > ;de) ![](FONT/eq.png) covers_pred(A;I) ![](FONT/eq.png) guarded_trace(A.da;te;I) ![](FONT/eq.png) closed_pred(I) ![](FONT/eq.png) single_valued_decls(A.ds) ![](FONT/eq.png) ( s0,x:[[A]] rho de e.state, act:[[A]] rho de e.action, x':[[A]] rho de e.state, tr:( [[A.da]] rho) List. [[A]] rho de e.init(s0) ![](FONT/eq.png) trace_reachable([[A]] rho de e;s0;mk_trace_env(tr, te).trace;x) ![](FONT/eq.png) [[I]] rho A.ds < > de e x mk_trace_env(tr, te) ![](FONT/eq.png) [[A]] rho de e.trans(x,act,x') ![](FONT/eq.png) (( t:dec(). t A.da & t.lbl = kind(act)) ![](FONT/eq.png) [[I]] rho A.ds < > de e x' tappend(mk_trace_env(tr, te);act)) ![](FONT/eq.png) [[I]] rho A.ds < > de e x' tappend(mk_trace_env(tr, te);act)) | [vc_trace_correct_action_decl_lemma] |
Thm* A:ioa{i:l}(), I:Fmla, de:sig(). tc_ioa(A;de) ![](FONT/eq.png) tc_pred(I;A.ds; < > ;de) ![](FONT/eq.png) covers_pred(A;I) ![](FONT/eq.png) closed_pred(I) ![](FONT/eq.png) single_valued_decls(A.ds) ![](FONT/eq.png) tc_vcs{i}(VCs(A;I);A.ds;A.da;de) | [tc_ioa_inv_vc] |
Thm* A:ioa{i:l}(), r:rel(), rho:Decl, de:sig(), e:{[[de]] rho}, a:( [[A.da]] rho), tr:trace_env([[A.da]] rho). tc_ioa(A;de) ![](FONT/eq.png) ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_rel(rho;A.da;tr.proj;r) ![](FONT/eq.png) single_valued_decls(A.ds) ![](FONT/eq.png) ( s,x':[[A]] rho de e.state. tc(r;A.ds; < > ;de) ![](FONT/eq.png) closed_rel(r) ![](FONT/eq.png) covers_rel(A;r) ![](FONT/eq.png) [[A]] rho de e.trans(s,a,x') ![](FONT/eq.png) ([[r]] rho A.ds < > de e x' tr ![](FONT/if_big.png) [[wp_rel(A;kind(a);r)]] rho A.ds dec_lookup(A.da;kind(a)) de e s value(a) tr)) | [wp_rel_correctness] |
Thm* A:ioa{i:l}(), I:Fmla. ioa_trans_all{i}(A;I) VCs | [ioa_trans_all_wf] |
Thm* A:ioa{i:l}(), de:sig(). tc_ioa(A;de) ![](FONT/eq.png) ioa_mentions_trace(A) ![](FONT/eq.png) ( Q:Fmla, rho:Decl, e:{[[de]] rho}, a:[[A]] rho de e.action, tr:trace_env([[A.da]] rho). tc_ioa(A;de) ![](FONT/eq.png) ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;tr.proj;Q) ![](FONT/eq.png) single_valued_decls(A.ds) ![](FONT/eq.png) ( s,x':[[A]] rho de e.state. tc_pred(Q;A.ds; < > ;de) ![](FONT/eq.png) closed_pred(Q) ![](FONT/eq.png) covers_pred(A;Q) ![](FONT/eq.png) [[A]] rho de e.trans(s,a,x') ![](FONT/eq.png) ([[Q]] rho A.ds < > de e x' tr ![](FONT/if_big.png) [[wp(A;kind(a);Q)]] rho A.ds dec_lookup(A.da;kind(a)) de e s value(a) tr))) | [wp_correctness] |
Thm* A:ioa{i:l}(), de:sig(). tc_ioa(A;de) ![](FONT/eq.png) ioa_mentions_trace(A) ![](FONT/eq.png) ( Q:Fmla, rho:Decl, e:{[[de]] rho}, a:[[A]] rho de e.action, tr:trace_env([[A.da]] rho). trace_consistent_pred(rho;A.da;tr.proj;Q) ![](FONT/eq.png) single_valued_decls(A.ds) ![](FONT/eq.png) ( s,x':[[A]] rho de e.state. tc_pred(Q;A.ds; < > ;de) ![](FONT/eq.png) closed_pred(Q) ![](FONT/eq.png) covers_pred(A;Q) ![](FONT/eq.png) [[A]] rho de e.trans(s,a,x') ![](FONT/eq.png) (pred_mng_2(Q; rho; A.ds; < > ; de; e; s; x'; ; tr) ![](FONT/if_big.png) [[wp2(A;kind(a);Q)]] rho A.ds dec_lookup(A.da;kind(a)) de e s value(a) tr))) | [wp2_correctness] |
Thm* A:ioa{i:l}(), Q:Fmla, rho:Decl, R:(Label![](FONT/dash.png) Label![](FONT/dash.png) ![](FONT/then_med.png) ), k:Label. ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;R;Q) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;R;wp(A;k;Q)) | [trace_consistent_wp] |
Thm* A:ioa{i:l}(), r:rel(), rho:Decl, de:sig(), e:{[[de]] rho}, a:( [[A.da]] rho), tr:trace_env([[A.da]] rho). tc_ioa(A;de) ![](FONT/eq.png) ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_rel(rho;A.da;tr.proj;r) ![](FONT/eq.png) single_valued_decls(A.ds) ![](FONT/eq.png) ( s,x':[[A]] rho de e.state. tc(r;A.ds; < > ;de) ![](FONT/eq.png) closed_rel(r) ![](FONT/eq.png) covers_rel(A;r) ![](FONT/eq.png) [[A]] rho de e.trans(s,a,x') ![](FONT/eq.png) (rel_mng_2(r; rho; A.ds; < > ; de; e; s; x'; ; tr) ![](FONT/if_big.png) [[wp2_rel(A;kind(a);r)]] rho A.ds dec_lookup(A.da;kind(a)) de e s value(a) tr)) | [wp2_rel_correctness] |
Thm* A:ioa{i:l}(), Q:Fmla, de:sig(), a:Label. tc_ioa(A;de) ![](FONT/eq.png) single_valued_decls(A.ds) ![](FONT/eq.png) tc_pred(Q;A.ds;dec_lookup(A.da;a);de) ![](FONT/eq.png) tc_pred(wp(A;a;Q);A.ds;dec_lookup(A.da;a);de) | [tc_wp] |
Thm* A:ioa{i:l}(), a:Label, P:Fmla. wp2(A;a;(P)') = wp(A;a;P) | [wp2_addprime] |
Thm* A:ioa{i:l}(), r:rel(), rho:Decl, de:sig(), e:{[[de]] rho}, a:( [[A.da]] rho), tr:trace_env([[A.da]] rho). tc_ioa(A;de) ![](FONT/eq.png) ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_rel(rho;A.da;tr.proj;r) ![](FONT/eq.png) single_valued_decls(A.ds) ![](FONT/eq.png) ( s,x':[[A]] rho de e.state. tc(r;A.ds;dec_lookup(A.da;kind(a));de) ![](FONT/eq.png) covers_rel(A;r) ![](FONT/eq.png) [[A]] rho de e.trans(s,a,x') ![](FONT/eq.png) (rel_mng_2(r; rho; A.ds; dec_lookup(A.da;kind(a)); de; e; s; x'; value(a); tr) ![](FONT/if_big.png) [[wp2_rel(A;kind(a);r)]] rho A.ds dec_lookup(A.da;kind(a)) de e s value(a) tr)) | [wp2_rel_correct] |
Thm* A:ioa{i:l}(), Q:Fmla, de:sig(), a:Label. tc_ioa(A;de) ![](FONT/eq.png) tc_pred(Q;A.ds;dec_lookup(A.da;a);de) ![](FONT/eq.png) single_valued_decls(A.ds) ![](FONT/eq.png) tc_pred(wp2(A;a;Q);A.ds;dec_lookup(A.da;a);de) | [tc_wp2] |
Thm* A:ioa{i:l}(), de:sig(), rho:Decl, e:{[[de]] rho}. tc_ioa(A;de) ![](FONT/eq.png) ioa_mentions_trace(A) ![](FONT/eq.png) [[A]] rho de e sm{i:l}() | [ioa_mng_wf] |
Thm* A:ioa{i:l}(), rho:Decl, de:sig(), act:( [[A.da]] rho), r,r0:rel(). tc_ioa(A;de) ![](FONT/eq.png) r smts_eff_rel(action_effect(kind(act);A.eff;A.frame);r0) ![](FONT/eq.png) rel_eq(rel_unprime(r);rel_unprime(r0)) ![](FONT/eq.png) ( t:dec(). t A.da & t.lbl = kind(act)) | [rel_effect_lemma] |
Thm* as:(Label Term) List, A:ioa{i:l}(), de:sig(), x:Label, t:SimpleType, k:Label. single_valued_decls(A.ds) ![](FONT/eq.png) tc_ioa(A;de) ![](FONT/eq.png) ( i: . i < ||as|| ![](FONT/eq.png) 2of(as[i]) smts_eff(action_effect(k;A.eff;A.frame);1of(as[i]))) ![](FONT/eq.png) mk_dec(x, t) A.ds ![](FONT/eq.png) t term_types(A.ds;dec_lookup(A.da;k);de;apply_alist(as;x;x)) | [tc_ioa_lemma] |
Thm* A:ioa{i:l}(), Q:Fmla, rho:Decl, R:(Label![](FONT/dash.png) Label![](FONT/dash.png) ![](FONT/then_med.png) ), k:Label. ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;R;Q) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;R;wp2(A;k;Q)) | [trace_consistent_wp2] |
Thm* A:ioa{i:l}(), I:Fmla, rho:Decl, te:(Label![](FONT/dash.png) Label![](FONT/dash.png) ![](FONT/then_med.png) ), a:dec(). ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;te;I) ![](FONT/eq.png) a A.da ![](FONT/eq.png) trace_consistent_pred(rho;A.da;te;smts_eff_pred(action_effect(a.lbl;A.eff;A.frame);I)) | [trace_consistent_action_effect] |
Thm* A:ioa{i:l}(), rho:Decl, r:rel(), R:(Label![](FONT/dash.png) Label![](FONT/dash.png) ![](FONT/then_med.png) ), k:Label. ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_rel(rho;A.da;R;r) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;R;wp2_rel(A;k;r)) | [trace_consistent_wp2_rel] |
Thm* A:ioa{i:l}(), rho:Decl, r:rel(), R:(Label![](FONT/dash.png) Label![](FONT/dash.png) ![](FONT/then_med.png) ), k:Label. ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_rel(rho;A.da;R;r) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;R;wp_rel(A;k;r)) | [trace_consistent_wp_rel] |
Thm* A:ioa{i:l}(), rho:Decl, te:(Label![](FONT/dash.png) Label![](FONT/dash.png) ![](FONT/then_med.png) ). ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;te;A.init) | [trace_consistent_init] |
Thm* A:ioa{i:l}(), rho:Decl, te:(Label![](FONT/dash.png) Label![](FONT/dash.png) ![](FONT/then_med.png) ), k:Label. ioa_mentions_trace(A) ![](FONT/eq.png) trace_consistent_pred(rho;A.da;te;action_pre(k;A.pre)) | [trace_consistent_action_pre] |
Thm* A:(I![](FONT/dash.png) ioa{i:l}()), rho:Decl, de:sig(), e:{[[de]] rho}, s:( [[ioa_all(I; i.A(i)).da]] rho), i:I. s [[A(i)]] rho de e.action | [ioa_all_mng_action] |
Thm* A:(I![](FONT/dash.png) ioa{i:l}()), rho:Decl, de:sig(), e:{[[de]] rho}, s:{[[ioa_all(I; i.A(i)).ds]] rho}, i:I. s [[A(i)]] rho de e.state | [ioa_all_mng_state] |