https://github.com/EasyCrypt/easycrypt
Revision 64c24ed6d2c0b485818e0ae76c4be0ebde0e628a authored by Benjamin Gregoire on 26 April 2018, 18:31:53 UTC, committed by Benjamin Gregoire on 26 April 2018, 18:31:53 UTC
The following is now possible:
type t, t', u, u', v, v'.

module type OT = {
  proc f(_: t): t'
  proc g1(_: t): t'
}.

module type MT (O : OT) = {
  include OT
  proc g(_: u): u'
}.

module type MT1 (O : OT) = {
  include OT [f]
  proc g(_: u): u'
}.

module type MT2 (O : OT) = {
  include OT [f] {O.f}
  proc g(_: u): u'
}.

module type MT3 (O : OT) = {
  include OT [f] {O.g1}
  proc g(_: u): u'
}.

module ((M : MT1):MT2) (O : OT) = {
  proc f = O.f

  proc g(x: u): u' = {
    return witness;
  }
}.

module M1 = {
  proc f () : unit = { }
  proc g () : unit = { }
}.

module M2 = {
  include M1
}.

module M3 = {
  include M1 [f]
}.

module M4 = {
  include M1 [+f]
}.

module M5 = {
  include M1 [-f]
}.

module F (O:OT) = {
  proc f1 () = {}
}.

module G (O:OT) = {
  include O
  include F(O)
}.

module G1 (O:OT) = {
  include O [-f]
  include F(O)
}.
1 parent 7f33e2a
Raw File
Tip revision: 64c24ed6d2c0b485818e0ae76c4be0ebde0e628a authored by Benjamin Gregoire on 26 April 2018, 18:31:53 UTC
improve "include" in module type and module.
Tip revision: 64c24ed
COPYRIGHT.yaml
entities:
  IMDEA : "IMDEA Software Institute"
  INRIA : "Inria"
  X     : "Ecole Polytechnique"
copyrights:
  - pattern: ["src/*.ml*", "src/*/*.ml*"]
    style: "ocaml"
    license: "CeCILL-C-V1"
    copyrights:
      - { who: "IMDEA", date: "2012--2016" }
      - { who: "INRIA", date: "2012--2018" }
      - { who: "X"    , date: "2012--2018" }
  - pattern: ["theories/*.ec", "theories/*/*.ec*"]
    style: "ocaml"
    license: "CeCILL-B-V1"
    copyrights:
      - { who: "IMDEA", date: "2012--2016" }
      - { who: "INRIA", date: "2012--2018" }
      - { who: "X"    , date: "2012--2018" }
back to top