Library Icharate.Kernel.natDedGram
Set Implicit Arguments.
Require Export natDed.
Require Export List.
Section syntaxNatDed.
Variables I
J
A
W:Set.
Variable eqdecI:eqdec I.
Variable eqdecJ :eqdec J.
Variable lexSyn:W ->list (Form I J A).
Variable ext:extension I J.
Fixpoint flattenCont (Gamma:context I J A W)
(laux:list ((resource W)*(Form I J A))) {struct Gamma}:
list ((resource W)*(Form I J A)):=
match Gamma with
| res r f => (r,f)::laux
| Comma _ G1 G2=> (flattenCont G1 (flattenCont G2 laux))
|TDiamond _ G1=> flattenCont G1 laux
end.
Fixpoint fits_aux (l:list ((resource W)*(Form I J A))) (sent:list W){struct l}
:Prop:=
match l with
|nil => match sent with
|nil => True
|others=> False
end
|cons ((word i w), f) ltail => match sent with
|cons m1 stail=>match (nth_error (lexSyn w) i) with
|None=>False
|Some f1=>w=m1/\ f1=f /\ fits_aux ltail stail
end
|others =>False
end
| _=>False
end.
Definition fitsContSent(Gamma:context I J A W)(sent:list W):=
fits_aux (flattenCont Gamma nil) sent.
Inductive reduceTo(sent:list W)(f:Form I J A):Set:=
|reduce1:forall (Gamma:context I J A W),
natded eqdecI eqdecJ ext Gamma f ->
fitsContSent Gamma sent->
reduceTo sent f.
End syntaxNatDed.
Record synLexicon : Type:=
mk_lexS {
I_syn :Set;
J_syn:Set;
A_syn:Set;
W_syn:Set;
eqdecI_syn:eqdec I_syn;
eqdecJ_syn :eqdec J_syn;
eqdecA_syn:eqdec A_syn;
lex_syn:W_syn ->list (Form I_syn J_syn A_syn)}.
Definition setSynLex(I J :Set)(A:Set)(W:Set)(eqdecI:eqdec I)
(eqdecJ:eqdec J)(eqdecA :eqdec A)
(lex:W -> list (Form I J A)):synLexicon:=
(mk_lexS eqdecI eqdecJ eqdecA lex).
Record synGram:Type:=
mk_gramS{
lexic_syn:synLexicon;
ext_syn:extension lexic_syn.(I_syn) lexic_syn.(J_syn)}.
Definition deriveToSyn (gr:synGram):=
reduceTo (gr.(lexic_syn)).(eqdecI_syn) (gr.(lexic_syn)).(eqdecJ_syn)
(gr.(lexic_syn)).(lex_syn) gr.(ext_syn).
Hint Unfold deriveToSyn:ctl_db.
Notation "'||' gr '||:' sent '>>' f ":= (deriveToSyn gr sent f)
(at level 30).
Notation " sent '{{' eqdecI eqdecJ lex ext '}}' '>->' f " :=
(reduceTo eqdecI eqdecJ lex ext sent f)(at level 20).
