%% Soundness and completeness for a focused logic
Specification "focus".
%% All logics have the same structure for contexts
Define ctx : olist -> prop by
ctx nil ;
ctx (hyp B :: L) := {form B} /\ ctx L.
Theorem ctx_member : forall E L,
ctx L -> member E L -> exists B, E = hyp B /\ {form B}.
induction on 1. intros. case H1.
case H2.
case H2.
search.
apply IH to H4 H5. search.
Theorem hyp_form : forall L B,
ctx L -> {L |- hyp B} -> {form B}.
intros. case H2. apply ctx_member to H1 H4. case H3. search.
Theorem hyp_imp_form : forall L B1 B2,
ctx L -> {L |- hyp (imp B1 B2)} -> {form B1} /\ {form B2}.
intros. apply hyp_form to H1 H2. case H3. search.
%% The focused system is sound
% This requires mutual induction
Theorem sound :
(forall L A B, ctx L -> {form B} -> {L |- focus B A} ->
{L, hyp B |- conc (atom A)})
/\
(forall L B, ctx L -> {form B} -> {L |- unfocus B} -> {L |- conc B}).
induction on 3 3. split.
% focus -> conc
intros. case H3.
search.
case H2. apply IH1 to H1 H6 H4. apply IH to _ H7 H5. search.
apply ctx_member to H1 H5. case H4.
% unfocus -> conc
intros. case H3.
case H2. apply IH1 to _ H6 H4. search.
apply hyp_form to H1 H4. apply IH to H1 H6 H5.
cut H7 with H4. search.
apply ctx_member to H1 H5. case H4.
Theorem soundness : forall L B,
ctx L -> {form B} -> {L |- unfocus B} -> {L |- conc B}.
apply sound. search.
%% The full logic can be restricted to initial cuts
Theorem init_form : forall L B,
{form B} -> member (hyp B) L -> {L |- conc-i B}.
induction on 1. intros. case H1.
search.
apply IH to H3 _ with L = hyp B1 :: L.
apply IH to H4 _ with L = hyp C :: L.
search.
Theorem restrict_init : forall L B,
ctx L -> {form B} -> {L |- conc B} -> {L |- conc-i B}.
induction on 3. intros. case H3.
case H4. apply ctx_member to H1 H6.
apply init_form to H7 H6. case H5. search.
case H2. apply IH to _ H6 H4. search.
apply hyp_imp_form to H1 H4.
apply IH to H1 H7 H5. apply IH to _ H2 H6. search.
apply ctx_member to H1 H5. case H4.
%% The focused logic is complete
Theorem lemma : forall B2,
(forall L B1 C,
ctx L -> {L |- hyp (imp B1 B2)} -> {form C} ->
{L |- unfocus B1} -> {L, hyp B2 |- unfocus C} -> {L |- unfocus C})
/\
(forall L B1 A B,
ctx L -> {L |- hyp (imp B1 B2)} -> {form B} ->
{L |- unfocus B1} -> {L, hyp B2 |- focus B A} -> {L |- focus B A}).
intros. induction on 5 5. split.
% {L, hyp B2 |- unfocus C} -> {L |- unfocus C}
intros. case H5.
case H3. apply IH to _ _ H8 _ H6. search.
case H6. case H9.
case H8. search.
apply ctx_member to H1 H10. case H8.
apply IH1 to H1 H2 H11 H4 H7. search.
case H7. case H6. apply ctx_member to H1 H8. case H6.
% {L, hyp B2 |- focus B A} -> {L |- focus B A}
intros. case H5.
search.
case H3. apply hyp_imp_form to H1 H2.
apply IH to _ _ H8 _ H6. apply IH1 to _ _ H9 _ H7. search.
case H7. case H6. apply ctx_member to H1 H8. case H6.
Theorem conc-i_complete : forall L B,
ctx L -> {form B} -> {L |- conc-i B} -> {L |- unfocus B}.
induction on 3. intros. case H3.
search.
case H2. apply IH to _ H6 H4. search.
apply hyp_imp_form to H1 H4.
apply IH to H1 H7 H5. apply IH to _ H2 H6.
apply lemma with B2 = C. apply H11 to H1 H4 H2 H9 H10. search.
apply ctx_member to H1 H5. case H4.
Theorem completeness : forall L B,
ctx L -> {form B} -> {L |- conc B} -> {L |- unfocus B}.
intros. apply restrict_init to H1 H2 H3.
apply conc-i_complete to H1 H2 H4. search.