X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fcontent_pres%2FproceduralTypes.ml;h=b7f6d3c6b68b2baf49909f448e86c5aa2f83e3e4;hb=664ce15981e66bc897f31963b2f9f2f1e3d11470;hp=700fed082c1d89fe3357aff87796d20d9b0f2e17;hpb=5f00ef380aafdaae93a40a3a47491d43ec9c3a62;p=helm.git diff --git a/helm/software/components/content_pres/proceduralTypes.ml b/helm/software/components/content_pres/proceduralTypes.ml index 700fed082..b7f6d3c6b 100644 --- a/helm/software/components/content_pres/proceduralTypes.ml +++ b/helm/software/components/content_pres/proceduralTypes.ml @@ -75,6 +75,7 @@ type step = Note of note | Rewrite of how * what * where * note | Elim of what * using option * note | Apply of what * note + | Whd of count * note | Branch of step list list * note (* annterm constructors *****************************************************) @@ -85,6 +86,8 @@ let mk_arel i b = Cic.ARel ("", "", i, b) let floc = H.dummy_floc +let hole = C.AImplicit ("", Some `Hole) + let mk_note str = G.Comment (floc, G.Note (floc, str)) let mk_theorem name t = @@ -114,7 +117,6 @@ let mk_letin name what = mk_tactic tactic let mk_rewrite direction what where = - let hole = C.AImplicit ("", Some `Hole) in let direction = if direction then `RightToLeft else `LeftToRight in let pattern, rename = match where with | None -> (None, [], Some hole), [] @@ -131,6 +133,11 @@ let mk_apply t = let tactic = G.Apply (floc, t) in mk_tactic tactic +let mk_whd i = + let pattern = None, [], Some hole in + let tactic = G.Reduce (floc, `Whd, pattern) in + mk_tactic tactic + let mk_dot = G.Executable (floc, G.Tactical (floc, G.Dot floc, None)) let mk_sc = G.Executable (floc, G.Tactical (floc, G.Semicolon floc, None)) @@ -154,24 +161,25 @@ let rec render_step sep a = function | Rewrite (b, t, w, s) -> mk_note s :: cont sep (mk_rewrite b t w :: a) | Elim (t, xu, s) -> mk_note s :: cont sep (mk_elim t xu :: a) | Apply (t, s) -> mk_note s :: cont sep (mk_apply t :: a) + | Whd (c, s) -> mk_note s :: cont sep (mk_whd c :: a) | Branch ([], s) -> a - | Branch ([ps], s) -> render_steps a ps + | Branch ([ps], s) -> render_steps sep a ps | Branch (pss, s) -> let a = mk_ob :: a in - let body = mk_cb :: list_rev_map_concat render_steps mk_vb a pss in + let body = mk_cb :: list_rev_map_concat (render_steps None) mk_vb a pss in mk_note s :: cont sep body -and render_steps a = function +and render_steps sep a = function | [] -> a - | [p] -> render_step None a p - | (Note _ | Theorem _ | Qed _ as p) :: ps -> - render_steps (render_step None a p) ps - | p :: ((Branch ([], _) :: _) as ps) -> - render_steps (render_step None a p) ps + | [p] -> render_step sep a p + | p :: Branch ([], _) :: ps -> + render_steps sep a (p :: ps) | p :: ((Branch (_ :: _ :: _, _) :: _) as ps) -> - render_steps (render_step (Some mk_sc) a p) ps + render_steps sep (render_step (Some mk_sc) a p) ps | p :: ps -> - render_steps (render_step (Some mk_dot) a p) ps + render_steps sep (render_step (Some mk_dot) a p) ps + +let render_steps a = render_steps None a (* counting *****************************************************************)