Section with_env.
Variable env:Store Prop.
Fixpoint interp_form (f:form): Prop :=
match f with
[n]=> match get n env with PNone => True | PSome P => P end
| A =>> B => (interp_form A) -> (interp_form B)
| # => False
| A //\\ B => (interp_form A) /\ (interp_form B)
| A \\// B => (interp_form A) \/ (interp_form B)
end.
Notation "[[ A ]]" := (interp_form A).
Fixpoint interp_ctx (hyps:ctx) (F:Full hyps) (G:Prop) {struct F} : Prop :=
match F with
F_empty => G
| F_push H hyps0 F0 =>  interp_ctx hyps0 F0  ([[H]] -> G)
end.
Ltac wipe := intros;simpl;constructor.
induction F;intros A H;simpl;auto.
Qed.
induction F;intros A B H;simpl;auto.
apply IHF;auto.
Qed.
induction F;intros A B C H;simpl;auto.
apply IHF;auto.
Qed.
induction F;intros A B C D H;simpl;auto.
apply IHF;auto.
Qed.
induction F;simpl;intros;auto.
apply compose1 with ([[a]]-> G);auto.
Qed.
induction F;simpl.
contradiction.
intros g H;destruct H.
subst;apply compose0;simpl;trivial.
apply compose1 with [[g]];auto.
Qed.

Theorem project : forall hyps F p g,
get  p hyps = PSome g->
interp_ctx hyps F [[g]].