| C.Prop -> T.Macro "PROP" :: is
| C.Type [`Type, u] -> T.Macro "TYPE" :: T.arg (U.string_of_uri u) :: is
| C.Type [`CProp, u] -> T.Macro "CROP" :: T.arg (U.string_of_uri u) :: is
| C.Type _ -> malformed "T1"
| C.Prop -> T.Macro "PROP" :: is
| C.Type [`Type, u] -> T.Macro "TYPE" :: T.arg (U.string_of_uri u) :: is
| C.Type [`CProp, u] -> T.Macro "CROP" :: T.arg (U.string_of_uri u) :: is
| C.Type _ -> malformed "T1"
- let is_w = proc_term [] c w in
- let is_t = proc_term is (K.add_dec s w c) t in
- T.Macro "PROD" :: T.arg s :: T.Group is_w :: is_t
+ let is_w = proc_term st [] w in
+ let is_t = proc_term {st with c=K.add_dec s w st.c} is t in
+ T.Macro "PROD" :: T.arg s :: T.free (mk_ptr st s) :: T.Group is_w :: is_t
- let is_w = proc_term [] c w in
- let is_t = proc_term is (K.add_dec s w c) t in
- T.Macro "ABST" :: T.arg s :: T.Group is_w :: is_t
+ let is_w = proc_term st [] w in
+ let is_t = proc_term {st with c=K.add_dec s w st.c} is t in
+ T.Macro "ABST" :: T.arg s :: T.free (mk_ptr st s) :: T.Group is_w :: is_t
| C.LetIn (s, w, v, t) ->
| C.LetIn (s, w, v, t) ->
- let is_w = proc_term [] c w in
- let is_v = proc_term [] c v in
- let is_t = proc_term is (K.add_def s w v c) t in
- T.Macro "ABBR" :: T.arg s :: T.Group is_w :: T.Group is_v :: is_t
+ let is_w = proc_term st [] w in
+ let is_v = proc_term st [] v in
+ let is_t = proc_term {st with c=K.add_def s w v st.c} is t in
+ T.Macro "ABBR" :: T.arg s :: T.free (mk_ptr st s) :: T.Group is_w :: T.Group is_v :: is_t
| C.Const (R.Ref (u, r)) ->
let ss = K.segments_of_uri u in
let _, _, _, _, obj = E.get_checked_obj G.status u in
let ss, name = K.name_of_reference ss (obj, r) in
T.Macro "GREF" :: T.arg name :: T.free (X.rev_map_concat X.id "." "type" ss) :: is
| C.Match (w, u, v, ts) ->
| C.Const (R.Ref (u, r)) ->
let ss = K.segments_of_uri u in
let _, _, _, _, obj = E.get_checked_obj G.status u in
let ss, name = K.name_of_reference ss (obj, r) in
T.Macro "GREF" :: T.arg name :: T.free (X.rev_map_concat X.id "." "type" ss) :: is
| C.Match (w, u, v, ts) ->
- let is_w = proc_term [] c (C.Const w) in
- let is_u = proc_term [] c u in
- let is_v = proc_term [] c v in
- let riss = L.rev_map (proc_term [] c) ts in
+ let is_w = proc_term st [] (C.Const w) in
+ let is_u = proc_term st [] u in
+ let is_v = proc_term st [] v in
+ let riss = L.rev_map (proc_term st []) ts in
-let mk_inferred st c t ris =
- let u = typeof c t in
- let is_u = proc_term [] c u in
- mk_dec "DECL" is_u st.n ris
+let mk_inferred st t ris =
+ let u = typeof st t in
+ let is_u = proc_term st [] u in
+ mk_dec st "DECL" is_u st.n ris
- let rts = X.rev_neg_filter (K.not_prop2 c) [t0] ts in
- let ris = T.Macro "STEP" :: mk_inferred st c t ris in
- let tts = L.rev_map (proc_term [] c) rts in
+ let rts = X.rev_neg_filter (K.not_prop2 st.c) [t0] ts in
+ let ris = T.Macro "STEP" :: mk_inferred st t ris in
+ let tts = L.rev_map (proc_term st []) rts in
mk_exit st (T.rev_mk_args tts ris)
| C.Match (w, u, v, ts) ->
mk_exit st (T.rev_mk_args tts ris)
| C.Match (w, u, v, ts) ->
- let rts = X.rev_neg_filter (K.not_prop2 c) [v] ts in
- let ris = T.Macro "DEST" :: mk_inferred st c t ris in
- let tts = L.rev_map (proc_term [] c) rts in
+ let rts = X.rev_neg_filter (K.not_prop2 st.c) [v] ts in
+ let ris = T.Macro "DEST" :: mk_inferred st t ris in
+ let tts = L.rev_map (proc_term st []) rts in
mk_exit st (T.rev_mk_args tts ris)
| C.LetIn (s, w, v, t) ->
mk_exit st (T.rev_mk_args tts ris)
| C.LetIn (s, w, v, t) ->
- if K.not_prop1 c w then
- let is_v = proc_term [] c v in
- let ris = T.Group is_v :: T.Macro "BODY" :: mk_dec "DECL" is_w s ris in
- proc_proof (next st) ris (K.add_def s w v c) t
+ if K.not_prop1 st.c w then
+ let is_v = proc_term st [] v in
+ let ris = T.Group is_v :: T.Macro "BODY" :: mk_dec st "DECL" is_w s ris in
+ proc_proof (next st (K.add_def s w v)) ris t
let note = T.Note "This file was automatically generated by MaTeX: do not edit"
let proc_item item s ss t =
let note = T.Note "This file was automatically generated by MaTeX: do not edit"
let proc_item item s ss t =
let t0 = A.process_top_term s t in (* anticipation *)
let tt = N.process_top_term s t0 in (* alpha-conversion *)
let ris = [T.free ss; T.arg s; T.arg "proof"; T.Macro "begin"; note] in
let t0 = A.process_top_term s t in (* anticipation *)
let tt = N.process_top_term s t0 in (* alpha-conversion *)
let ris = [T.free ss; T.arg s; T.arg "proof"; T.Macro "begin"; note] in