Extraction: fix complexity issue #5310
Extraction: fix complexity issue #5310

  A double call to pp_module_type inside Ocaml.pp_specif was
  causing an complexity blowup when pretty-printing heavily modular
  extracted code.

  I wasn't able to figure out why this double call is there. It could
  be the leftover of some intermediate work in 2007 before commit 350398eae
  (which introduced global printing phases Pre/Impl/Intf).

  Anyway I'm reasonably sure that today these two pp_module_type calls produce
  the exact same pretty-printed signature (even if there's a large bunch of
  imperative states around). Moreover, this duplicated signature is actually
  slightly wrong: when we alias a module M with a unambiguous name like Coq__123,
  the type of Coq__123 should not be an exact copy of the type of M, but rather
  a "strengthened" version of it (with equality between inductive types).
  So the best solution is now to use this funny feature of OCaml introduced in 3.12 :

  module Coq__123 : module type of struct include M end

  This "module type of struct include" is slightly awkward, but short, correct,
  and trivial to produce :-). And I doubt anybody will object to the (rare) use
  of some 3.12 features in extracted code of 2017...

ppedrot/coq,letouzey/coq-wip,maximedenes/coq,SkySkimmer/coq,coq/coq,ppedrot/coq,maximedenes/coq,Ptival/coq,maximedenes/coq,Matafou/coq,Ptival/coq,JasonGross/coq,coq/coq,SkySkimmer/coq,silene/coq,gares/coq,letouzey/coq-wip,ejgallego/coq,Ptival/coq,letouzey/coq-wip,Matafou/coq,amintimany/coq,ppedrot/coq,Zimmi48/coq,letouzey/coq-wip,gares/coq,JasonGross/coq,ppedrot/coq,ejgallego/coq,amintimany/coq,william-lawvere/coq,Lionel-Rieg/coq,ppedrot/coq,SkySkimmer/coq,silene/coq,gares/coq,gares/coq,SkySkimmer/coq,amintimany/coq,Lionel-Rieg/coq,Zimmi48/coq,maximedenes/coq,letouzey/coq-wip,silene/coq,JasonGross/coq,william-lawvere/coq,gares/coq,maximedenes/coq,JasonGross/coq,coq/coq,Zimmi48/coq,ejgallego/coq,Zimmi48/coq,Matafou/coq,coq/coq,Lionel-Rieg/coq,ejgallego/coq,william-lawvere/coq