├── .gitignore ├── LICENSE ├── Makefile ├── README.txt ├── _CoqProject ├── attic ├── ATS.v ├── BackEnd.v ├── DCE.v ├── Example_mod.v ├── Example_proc.v ├── FO.v ├── Iso.v ├── MOD.v ├── Moore.v ├── Mult.v ├── TRS.v ├── TRSLET.v ├── TRS_to_ATS.v ├── TU_to_Core.v ├── TaggedUnions.v ├── actions.v ├── draw_sorter.ml └── nested.v ├── examples ├── .gitignore ├── Add.v ├── Driver.v ├── Extraction.v ├── Makefile ├── README.txt ├── Sorter.v ├── Stack.v ├── backend │ ├── backend.ml │ └── generators.ml ├── test_adder │ ├── Adder.v │ ├── Makefile │ ├── README │ ├── Test.v │ └── main.v ├── test_sorter │ ├── Makefile │ ├── README.txt │ ├── Sorter.v │ ├── Test.v │ └── main.v ├── test_stack │ ├── Makefile │ ├── README.txt │ ├── Stack.v │ ├── Test.v │ ├── fibonacci.ml │ └── main.v └── verilog │ ├── Adder.v │ ├── Sorter.v │ └── Stack.v ├── notes.txt ├── papers ├── .gitignore ├── cav-13 │ ├── llncs.cls │ ├── lstcoq.sty │ ├── lsthaskell.sty │ ├── lstocaml.sty │ ├── macros.sty │ ├── main-blx.bib │ ├── main.tex │ ├── mathpartir.sty │ ├── subfigure.sty │ └── synthesis.bib ├── coq-workshop-12 │ ├── lstcoq.sty │ ├── lstcoq_circuits.sty │ ├── lsthaskell.sty │ ├── lstocaml.sty │ ├── macros.sty │ ├── main.pdf │ ├── main.tex │ ├── mathpartir.sty │ ├── subfigure.sty │ └── synthesis.bib └── fe-si-submission.pdf ├── question.txt ├── simple-verilog ├── Fifo.v ├── Makefile ├── Test.v └── main.v ├── src ├── BDD.v ├── CP.v ├── CSE.v ├── Common.v ├── Compare.v ├── Compiler.v ├── Consider.v ├── Core.v ├── DList.v ├── FirstOrder.v ├── Front.v ├── IR.v ├── README.txt ├── RTL.v ├── Seq.v ├── Structures.v ├── Vector.v ├── Word.v └── bdd.ml └── talks ├── annecy-2013 ├── Makefile ├── auto │ └── talk.el ├── figs │ ├── DC.graffle │ ├── DC.pdf │ ├── DC1.pdf │ ├── DC_1.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ ├── image2.pdf │ │ ├── image3.pdf │ │ └── image4.pdf │ ├── DC_ext.graffle │ ├── compilation.pdf │ ├── coq-workshop.pdf │ └── rtl.pdf ├── hareng.sty ├── lstcoq.sty ├── lstocaml.sty ├── mathpartir.sty ├── phoas.v ├── talk.aux ├── talk.dvi ├── talk.log ├── talk.nav ├── talk.out ├── talk.snm ├── talk.tex ├── talk.toc └── talk.vrb ├── cav-2013 ├── Makefile ├── figs │ ├── DC.graffle │ ├── DC.pdf │ ├── DC1.pdf │ ├── DC_1.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ ├── image2.pdf │ │ ├── image3.pdf │ │ └── image4.pdf │ ├── DC_ext.graffle │ ├── _mlpost.aux │ ├── _mlpost.log │ ├── _mlpost.pdf │ ├── _mlpost.tex │ ├── adder-1.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ ├── image5.pdf │ │ └── image6.pdf │ ├── adder-1.pdf │ ├── adder-2.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ ├── image10.pdf │ │ ├── image12.pdf │ │ └── image13.pdf │ ├── adder-2.pdf │ ├── analogy-1.pdf │ ├── analogy-2.pdf │ ├── analogy-3.pdf │ ├── analogy-4.pdf │ ├── bitonic1.png │ ├── compil-0.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ ├── image2.pdf │ │ ├── image3.pdf │ │ ├── image4.pdf │ │ └── image6.pdf │ ├── compil-0.pdf │ ├── compil-1.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ ├── image10.pdf │ │ ├── image2.pdf │ │ ├── image3.pdf │ │ ├── image6.pdf │ │ ├── image7.pdf │ │ ├── image8.pdf │ │ └── image9.pdf │ ├── compil-1.pdf │ ├── compil-2.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ ├── image2.pdf │ │ ├── image3.pdf │ │ └── image4.pdf │ ├── compil-2.pdf │ ├── compilation.pdf │ ├── coq-workshop.pdf │ ├── examples.graffle │ ├── examples.pdf │ ├── figs.cmi │ ├── figs.ml │ ├── file_a.mps │ ├── file_b.mps │ └── rtl.pdf ├── hareng.sty ├── lstcoq.sty ├── lstocaml.sty ├── mathpartir.sty ├── talk.dvi ├── talk.pdfpc └── talk.tex ├── coq-2012 ├── Makefile ├── figs │ ├── DC.graffle │ ├── DC.pdf │ ├── DC1.pdf │ ├── DC_1.graffle │ │ ├── QuickLook │ │ │ ├── Preview.pdf │ │ │ └── Thumbnail.tiff │ │ ├── data.plist │ │ ├── image2.pdf │ │ ├── image3.pdf │ │ └── image4.pdf │ ├── DC_ext.graffle │ ├── compilation.pdf │ ├── coq-workshop.pdf │ └── rtl.pdf ├── hareng.sty ├── lstcoq.sty ├── lstocaml.sty ├── mathpartir.sty ├── phoas.v ├── talk.pdf └── talk.tex └── grenoble-2013 ├── figs ├── DC.graffle ├── DC.pdf ├── DC1.pdf ├── DC_1.graffle │ ├── QuickLook │ │ ├── Preview.pdf │ │ └── Thumbnail.tiff │ ├── data.plist │ ├── image2.pdf │ ├── image3.pdf │ └── image4.pdf ├── DC_ext.graffle ├── adder-1.graffle │ ├── QuickLook │ │ ├── Preview.pdf │ │ └── Thumbnail.tiff │ ├── data.plist │ ├── image5.pdf │ └── image6.pdf ├── adder-1.pdf ├── adder-2.graffle │ ├── QuickLook │ │ ├── Preview.pdf │ │ └── Thumbnail.tiff │ ├── data.plist │ ├── image10.pdf │ ├── image12.pdf │ └── image13.pdf ├── adder-2.pdf ├── analogy-1.pdf ├── analogy-2.pdf ├── analogy-3.pdf ├── analogy-4.pdf ├── bitonic1.png ├── compil-0.graffle │ ├── QuickLook │ │ ├── Preview.pdf │ │ └── Thumbnail.tiff │ ├── data.plist │ ├── image2.pdf │ ├── image3.pdf │ ├── image4.pdf │ └── image6.pdf ├── compil-0.pdf ├── compil-1.graffle │ ├── QuickLook │ │ ├── Preview.pdf │ │ └── Thumbnail.tiff │ ├── data.plist │ ├── image10.pdf │ ├── image2.pdf │ ├── image3.pdf │ ├── image6.pdf │ ├── image7.pdf │ ├── image8.pdf │ └── image9.pdf ├── compil-1.pdf ├── compil-2.graffle │ ├── QuickLook │ │ ├── Preview.pdf │ │ └── Thumbnail.tiff │ ├── data.plist │ ├── image2.pdf │ ├── image3.pdf │ └── image4.pdf ├── compil-2.pdf ├── compilation.pdf ├── coq-workshop.pdf ├── examples.graffle ├── examples.pdf └── rtl.pdf ├── talk.pdf └── talk.tex /.gitignore: -------------------------------------------------------------------------------- 1 | src/html/ 2 | *.v.d 3 | *.vo 4 | *.glob 5 | *~ 6 | Makefile.coq 7 | 8 | examples/Makefile.coq 9 | papers/coq-workshop-12/auto/ 10 | papers/coq-workshop-12/main-blx.bib 11 | papers/coq-workshop-12/main.aux 12 | papers/coq-workshop-12/main.bbl 13 | papers/coq-workshop-12/main.blg 14 | papers/coq-workshop-12/main.log 15 | papers/coq-workshop-12/main.rel 16 | papers/coq-workshop-12/main.run.xml 17 | papers/coq-workshop-12/main.synctex.gz 18 | src/Makefile.coq 19 | talks/coq-2012/auto/ 20 | talks/coq-2012/talk.aux 21 | talks/coq-2012/talk.log 22 | talks/coq-2012/talk.nav 23 | talks/coq-2012/talk.out 24 | talks/coq-2012/talk.snm 25 | talks/coq-2012/talk.synctex.gz 26 | talks/coq-2012/talk.toc 27 | talks/coq-2012/talk.vrb 28 | .DS_Store 29 | talks/.DS_Store 30 | talks/coq-2012/.DS_Store 31 | talks/coq-2012/figs/.DS_Store 32 | talks/coq-2012/talk.rel 33 | .\#question.txt 34 | .dir-locals.el 35 | examples/backend/pprint/ 36 | examples/main.byte 37 | papers/cav-13/--help 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Portions copyright (c) 2012, Inria 2 | Portions copyright (c) 2012, Massachusetts Institute of Technology 3 | All rights reserved. 4 | 5 | Authors: Thomas Braibant 6 | Adam Chlipala 7 | 8 | Redistribution and use in source and binary forms, with or without 9 | modification, are permitted provided that the following conditions are met: 10 | 11 | - Redistributions of source code must retain the above copyright notice, 12 | this list of conditions and the following disclaimer. 13 | - Redistributions in binary form must reproduce the above copyright notice, 14 | this list of conditions and the following disclaimer in the documentation 15 | and/or other materials provided with the distribution. 16 | - The names of contributors may not be used to endorse or promote products 17 | derived from this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 | POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Makefile for FeSI 2 | 3 | all : Makefile.coq 4 | $(MAKE) -f Makefile.coq 5 | 6 | clean : Makefile.coq 7 | $(MAKE) -f Makefile.coq clean 8 | rm -f Makefile.coq 9 | 10 | Makefile.coq : Makefile _CoqProject 11 | coq_makefile -f _CoqProject -o Makefile.coq 12 | -------------------------------------------------------------------------------- /README.txt: -------------------------------------------------------------------------------- 1 | This is the supplementary materials associated to the "Fe-Si : Formal 2 | verification of hardware synthesis paper" 3 | 4 | It contains two directories. 5 | - src contains the sources of the compiler 6 | - examples contains the various examples discussed in the paper, as 7 | well as the prototype OCaml back-end to verilog. 8 | 9 | Each of this directory contains a README file with more informations. 10 | 11 | Running [make] builds the whole development. In the examples 12 | directory, running [make demo] generates examples cores. 13 | 14 | -------------------------------------------------------------------------------- /_CoqProject: -------------------------------------------------------------------------------- 1 | -R ./src Synthesis 2 | -R ./examples SynthExamples 3 | ./src/Common.v 4 | ./src/BDD.v 5 | ./src/CP.v 6 | ./src/Seq.v 7 | ./src/Compare.v 8 | ./src/Word.v 9 | ./src/Structures.v 10 | ./src/FirstOrder.v 11 | ./src/Core.v 12 | ./src/RTL.v 13 | ./src/Compiler.v 14 | ./src/Vector.v 15 | ./src/Front.v 16 | ./src/DList.v 17 | ./src/CSE.v 18 | ./src/IR.v 19 | ./src/Consider.v 20 | ./examples/Sorter.v 21 | ./examples/Driver.v 22 | ./examples/Extraction.v 23 | ./examples/Add.v 24 | ./examples/Stack.v 25 | -------------------------------------------------------------------------------- /attic/ATS.v: -------------------------------------------------------------------------------- 1 | 2 | Require Import Common. 3 | Inductive type := 4 | | Tregfile : forall (size : nat) (base : type0) , type 5 | | Tfifo : nat -> type0 -> type 6 | | Tbase : type0 -> type 7 | | Tinput : type0 -> type 8 | | Toutput : type0 -> type. 9 | 10 | 11 | Fixpoint eval_type (t : type) : Type := 12 | match t with 13 | | Tregfile size bt => Regfile.T size (eval_type0 bt) 14 | | Tfifo n bt => FIFO.T n (eval_type0 bt) 15 | | Tbase bt => eval_type0 bt 16 | | Tinput bt => eval_type0 bt 17 | | Toutput bt => eval_type0 bt 18 | end. 19 | 20 | Definition eval_list_type := eval_env eval_type. 21 | 22 | 23 | Section expr. 24 | Variable Env : list type. 25 | 26 | Inductive expr : type0 -> Type := 27 | | Eprim : forall f (args: expr_vector (args (f))), expr ( (res (f))) 28 | | Eget : forall t (v : var Env (Tbase t)), expr t 29 | (* operations on arrays *) 30 | | Eget_array : forall size n t (v : var Env (Tregfile size t)), expr (Tint n) -> expr t 31 | (* operations on fifo *) 32 | | Efirst : forall n t (v : var Env (Tfifo n t)), expr t 33 | | Eisfull : forall n t (v : var Env (Tfifo n t)), expr (Tbool) 34 | | Eisempty : forall n t (v : var Env (Tfifo n t)), expr (Tbool) 35 | (* operations on Inputs *) 36 | | Eget_input : forall t (v : var Env (Tinput t)), expr t 37 | (* operations on Outputs *) 38 | | Eget_output : forall t (v : var Env (Toutput t)), expr t 39 | 40 | with expr_vector : list type0 -> Type := 41 | | expr_vector_nil : expr_vector nil 42 | | expr_vector_cons : forall t q, expr (t) -> expr_vector q -> expr_vector (t::q). 43 | 44 | (* top level expressions *) 45 | Inductive expr2 : type -> Type := 46 | | Eset : forall t , expr t -> expr2 (Tbase t) 47 | | Eset_array : forall size n t, 48 | expr (Tint n) -> expr t -> expr2 (Tregfile size t) 49 | (* operations on fifos *) 50 | | Epush : forall n t, expr t -> expr2 (Tfifo n t) 51 | | Epop : forall n t, expr2 (Tfifo n t) (* forgets the first element *) 52 | | Epushpop : forall n t, expr t -> expr2 (Tfifo n t) 53 | | Eclear : forall n t, expr2 (Tfifo n t) 54 | 55 | (* set an output *) 56 | | Eset_output : forall t, expr t -> expr2 (Toutput t) 57 | 58 | (* do nothing *) 59 | | Enop : forall t, expr2 t. 60 | 61 | 62 | Variable ENV : eval_list_type Env. 63 | 64 | Fixpoint eval_expr t (e : expr t) : option (eval_type0 t) := 65 | match e with 66 | | Eprim f args => 67 | let eval_expr_vector := 68 | fix eval_expr_vector l (v : expr_vector l) {struct v} : option (eval_type0_list l) := 69 | match v with 70 | | expr_vector_nil => Some tt 71 | | expr_vector_cons hd q e vq => 72 | do hd <- eval_expr hd e; 73 | do tl <- eval_expr_vector q vq; 74 | Some (hd,tl) 75 | end 76 | in 77 | do args <- (eval_expr_vector _ args); 78 | Some (value (f) args) 79 | | Eget t v => Some (get Env (Tbase t) v ENV) 80 | | Efirst n bt fifo => 81 | let fifo := (get Env (Tfifo n bt) fifo ENV ) in 82 | @FIFO.first (eval_type0 bt) n fifo 83 | | Eisfull n bt fifo => 84 | let fifo := (get Env (Tfifo n bt) fifo ENV ) in 85 | Some (@FIFO.isfull _ n fifo) 86 | | Eisempty n bt fifo => 87 | let fifo := (get Env (Tfifo n bt) fifo ENV ) in 88 | Some (@FIFO.isempty _ n fifo) 89 | | Eget_input bt x => 90 | let x := get Env (Tinput bt) x ENV in 91 | Some x 92 | | Eget_output bt x => 93 | let x := get Env (Toutput bt) x ENV in 94 | Some x 95 | | Eget_array size n bt v idx => 96 | let v := get Env (Tregfile size bt) v ENV in 97 | do idx <- eval_expr _ idx; 98 | @Regfile.get size _ v (Word.unsigned idx) 99 | end. 100 | 101 | Fixpoint eval_expr2 t (e : expr2 t) : eval_type t -> option (eval_type t) := 102 | match e with 103 | | Eset t e => 104 | fun r => eval_expr t e 105 | | Eset_array size n t adr e => 106 | fun v => 107 | do adr <- eval_expr _ adr; 108 | do e <- eval_expr _ e; 109 | let adr := Word.unsigned adr in 110 | (* Since Regfile.set silently erases out of bounds 111 | accesses, we add an extra check here *) 112 | check (lt_nat_bool adr size); 113 | Some (@Regfile.set size (eval_type0 t) v adr e) 114 | | Epush n t e => 115 | fun f => 116 | do e <- eval_expr t e; 117 | Some (FIFO.push e f) 118 | | Epop n t => 119 | fun f => 120 | @FIFO.pop _ n f 121 | | Epushpop n t e => 122 | fun f => 123 | do f <- @FIFO.pop _ n f; 124 | do e <- eval_expr t e; 125 | Some (FIFO.push e f) 126 | | Eclear n t => 127 | fun f => Some (FIFO.clear f) 128 | | Eset_output t e => 129 | fun _ => eval_expr t e 130 | | Enop t => fun x => Some x 131 | end. 132 | End expr. 133 | 134 | 135 | 136 | (* A transition is parametrized by a memory environment. 137 | It contains a guard (a boolean expression), and a dependtly-typed list, which ensure that every memory location is updated. *) 138 | 139 | Record transition Env := 140 | { pi : expr Env Tbool; 141 | alpha : dlist (expr2 Env) Env}. 142 | 143 | Definition eval_alpha E (alpha : dlist (expr2 E) E) : 144 | eval_list_type E -> option (eval_list_type E) := 145 | fun (X : eval_list_type E) => 146 | dlist_fold type (expr2 E) eval_type (eval_expr2 E X) E alpha X. 147 | 148 | Record ATS := 149 | { 150 | memory : list type; 151 | transitions : list (transition (memory)) 152 | }. 153 | 154 | Definition eval_transition (mem: list type) (tr : transition mem) : 155 | eval_list_type mem -> option (eval_list_type mem) := 156 | fun (E : eval_list_type mem) => 157 | let guard := eval_expr mem E Tbool (pi mem tr) in 158 | match guard with 159 | | Some true => eval_alpha mem (alpha mem tr) E 160 | | Some false => None 161 | | None => None 162 | end. 163 | 164 | Fixpoint eval_transitions mem (l : list (transition mem)) := 165 | match l with 166 | | nil => fun _ _ => True 167 | | cons t q => union (fun x y => eval_transition mem t x = Some y) 168 | (eval_transitions mem q) 169 | end. 170 | 171 | Definition eval (X : ATS) := 172 | eval_transitions (memory X) (transitions X). 173 | -------------------------------------------------------------------------------- /attic/Example_mod.v: -------------------------------------------------------------------------------- 1 | Require Import Common. 2 | Require Import TRS. 3 | 4 | Definition Num : type1 := T01 (Tint 32). 5 | Definition Val : type1 := 6 | Tunion "Val" ("MOD" of (Ttuple [Num; Num]) 7 | :: "VAL" of (Ttuple [Num]) 8 | :: nil ). 9 | 10 | Definition mod_iterate_rule : rule [Treg Val]. 11 | set (env := [Treg Num; Treg Num]). 12 | set (a := var_0 : var env (Treg Num)). 13 | set (b := var_S var_0 : var env (Treg Num)). 14 | apply (mk_rule' env). 15 | 16 | Definition pattern2_vector_singleton E t x := 17 | pattern2_vector_cons E _ t _ x pattern2_vector_nil. 18 | apply (pattern2_vector_singleton env). 19 | apply Plift. 20 | eapply Punion. apply (pattern1_disjunct_hd). 21 | apply ([| Pvar1 Num, Pvar1 Num |])%pattern. 22 | 23 | apply (! b <= ! a)%expr. 24 | 25 | 26 | Definition expr2_vector_singleton E t (x : @expr2 E t) : expr2_vector E [t] := 27 | dlist_cons x (@dlist_nil type2 (expr2 E)). 28 | 29 | apply expr2_vector_singleton. 30 | eapply Eset. eapply Eunion. eapply expr1_disjunct_hd. apply ([| !a - !b, !b|])%expr. 31 | Defined. 32 | 33 | Definition mod_done_rule : rule [Treg Val]. 34 | set (env := [Treg Num; Treg Num]). 35 | set (a := var_0 : var env (Treg Num)). 36 | set (b := var_S var_0 : var env (Treg Num)). 37 | apply (mk_rule' env). 38 | 39 | apply (pattern2_vector_singleton env). 40 | apply Plift. eapply Punion. apply pattern1_disjunct_hd. 41 | apply ([| Pvar1 Num, Pvar1 Num |])%pattern. 42 | 43 | apply (!a < !b)%expr. 44 | 45 | apply expr2_vector_singleton. 46 | apply Eset. 47 | apply Eunion. apply expr1_disjunct_tl. apply expr1_disjunct_hd. 48 | apply ([| !a |])%expr. 49 | Defined. 50 | 51 | Definition TRS : TRS := 52 | {| trs_type := [Treg Val]; 53 | trs_rules := [mod_iterate_rule; mod_done_rule ]|}. 54 | 55 | Definition AA : Word.T 32 := Word.repr 32 31. 56 | Definition BB : Word.T 32 := Word.repr 32 3. 57 | 58 | Definition this_ENV : eval_env eval_type2 [Treg Num; Treg Num] := (AA, (BB, tt)). 59 | 60 | Eval compute in run_unfair 10 TRS ((inl this_ENV, tt)). 61 | -------------------------------------------------------------------------------- /attic/Iso.v: -------------------------------------------------------------------------------- 1 | Require Export FunctionalExtensionality. 2 | 3 | Delimit Scope iso_scope with iso. 4 | 5 | Set Implicit Arguments. 6 | 7 | Class T (A B : Type) : Type := mk_T 8 | { 9 | iso : A -> B; 10 | uniso : B -> A 11 | }. 12 | 13 | Arguments mk_T {A B} iso uniso. 14 | Arguments iso {A B} T _. 15 | Arguments uniso {A B} T _. 16 | 17 | (** We separate the properties and the definition of the function *) 18 | Class P {A B: Type} (I : T A B):= mk_P 19 | { 20 | iso_uniso : forall x, iso I (uniso I x) = x; 21 | uniso_iso : forall x, uniso I (iso I x) = x 22 | }. 23 | 24 | Section Group. 25 | Variable A B C : Type. 26 | 27 | Definition one : T A A := {| iso := @id A ; uniso := @id A |}. 28 | Lemma one_P : P one. Proof. firstorder. Qed. 29 | 30 | Definition inv (I : T A B) : T B A := {| iso := uniso I ; uniso := iso I |}. 31 | Lemma inv_P (I : T A B): P I -> P (inv I). Proof. firstorder. Qed. 32 | 33 | Definition compose (I : T A B) (J : T B C) : T A C := 34 | {| 35 | iso := fun x => iso J (iso I x); 36 | uniso := fun x => uniso I (uniso J x) 37 | |}. 38 | 39 | Lemma compose_P (I : T A B) (J : T B C): P I -> P J -> P (compose I J). 40 | Proof. 41 | constructor; intros; simpl. 42 | do 2 rewrite iso_uniso. reflexivity. 43 | do 2 rewrite uniso_iso. reflexivity. 44 | Qed. 45 | 46 | End Group. 47 | 48 | Notation "1" := (one _) : iso_scope. 49 | Notation "I * J" := (compose I J) : iso_scope. 50 | Notation "- I" := (inv I) : iso_scope. 51 | 52 | 53 | (* extensionnal equality on isos *) 54 | Record equiv {A B} (I J: T A B) := mk_eq 55 | { equiv_iso : forall (x : A), @iso A B I x = @iso A B J x; 56 | equiv_uniso : forall (x : B), @uniso A B I x = @uniso A B J x}. 57 | 58 | Notation "I == J" := (equiv I J) (at level 50). 59 | 60 | 61 | Section Group_P. 62 | Context {A B} (I : T A B) (PI: P I). 63 | 64 | Lemma one_compose_right : (I * 1 == I)%iso. 65 | Proof. 66 | split; intros x; reflexivity. 67 | Qed. 68 | 69 | Lemma one_compose_left : (1 * I == I)%iso. 70 | Proof. 71 | split; intros x; reflexivity. 72 | Qed. 73 | 74 | Lemma inv_compose : ((- I) * I == 1 )%iso. 75 | Proof. 76 | split; intros x; simpl; rewrite iso_uniso; reflexivity. 77 | Qed. 78 | 79 | Context {C D} (J : T B C) (K : T C D) (PJ: P J) (PK : P K). 80 | Lemma compose_assoc : ((I * J) * K == I * (J * K))%iso. 81 | Proof. 82 | split; intros;simpl;reflexivity. 83 | Qed. 84 | End Group_P. 85 | 86 | 87 | Section Product. 88 | Context {A B A' B' : Type}(I : T A B) (J : T A' B') (PI : P I) (PJ : P J). 89 | 90 | Definition prod : T (A * A') (B * B'):= 91 | {| 92 | iso := fun x => (iso I (fst x), iso J (snd x)); 93 | uniso := fun x => (uniso I (fst x), uniso J (snd x)) 94 | |}. 95 | 96 | Lemma prod_P : P (prod). 97 | Proof. 98 | constructor. 99 | intros [x y]; simpl; do 2 rewrite iso_uniso; reflexivity. 100 | intros [x y]; simpl; do 2 rewrite uniso_iso; reflexivity. 101 | Qed. 102 | End Product. 103 | 104 | (* One need to unfold these combinators in the proofs *) 105 | Section wrap. 106 | Context {A : Type}. 107 | Definition select_left {n} {m} (x : (n + m) -> A) : n -> A := 108 | fun e => (x (inl _ e)). 109 | Definition select_right {n} {m} (x : (n + m) -> A) : m -> A := 110 | fun e => (x (inr _ e)). 111 | Definition lift {n} {m} (f : m -> n) (x : n -> A) : m -> A := 112 | fun e => x (f e). 113 | 114 | Definition app {n m} (x : n -> A) (y : m -> A) : n + m -> A := 115 | fun e => match e with inl e => x e | inr e => y e end. 116 | End wrap. 117 | 118 | (* Concrete isomorphisms *) 119 | Section Concrete. 120 | Context {X : Type}. 121 | Program Definition zero : T (False -> X) unit := 122 | {| 123 | iso := fun _ => tt; 124 | uniso := fun _ x => match x with end 125 | |}. 126 | 127 | Lemma zero_P : P zero. 128 | Proof. 129 | constructor. 130 | intros []; reflexivity. 131 | intros; apply functional_extensionality; intros []. 132 | Qed. 133 | 134 | 135 | Program Definition unit : T (unit -> X) X := 136 | {| 137 | iso := fun f => f tt; 138 | uniso := fun e x => match x with | tt => e end 139 | |}. 140 | 141 | Lemma unit_P : P unit. 142 | Proof. 143 | constructor. 144 | intros x; reflexivity. 145 | intros; apply functional_extensionality. intros []; reflexivity. 146 | Qed. 147 | 148 | Section sum. 149 | 150 | Context {A B sigma tau : Type} (I : T (A -> X) sigma) (J : T (B -> X) tau) (PI : P I) (PJ : P J). 151 | Definition sum : T (A + B -> X) (sigma * tau) := 152 | {| 153 | iso := fun X : A + B -> X => 154 | (iso I (select_left X), iso J (select_right X)); 155 | uniso := fun x : sigma * tau =>let (a, b) := x in 156 | app (uniso I a) (uniso J b) 157 | |}. 158 | 159 | End sum. 160 | End Concrete. 161 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /attic/MOD.v: -------------------------------------------------------------------------------- 1 | Require Import Common DList . 2 | Require Core. 3 | 4 | Require ZArith. Open Scope Z_scope. 5 | Module Ex2. 6 | Require Import Core Front. 7 | 8 | Section t. 9 | Variable n : nat. 10 | Notation NUM := ( (Tint n)). 11 | Notation VAL := ( (Tbool)) (only parsing). 12 | Definition Phi : state := (Treg VAL :: Treg NUM :: Treg NUM :: nil)%list. 13 | 14 | Notation c := (var_0 : var Phi (Treg VAL)). 15 | Notation r1 := (var_S (var_0) : var Phi (Treg NUM)). 16 | Notation r2 := (var_S (var_S (var_0)) : var Phi (Treg NUM)). 17 | Open Scope action_scope. 18 | Definition iterate : Action Phi Tunit. intros V. 19 | refine (do X <- read [: c]; 20 | WHEN ( X); 21 | do A <- read [: r1]; 22 | do B <- read [: r2]; 23 | WHEN (B <= A); 24 | DO _ <- (write [: r1 <- (A - B)]); 25 | ret (#Ctt) 26 | ). 27 | Defined. 28 | 29 | Definition done : Action Phi Tunit. intros V. 30 | refine (do X <- read [: c]; 31 | WHEN (X); 32 | do A <- read [: r1]; 33 | do B <- read [: r2]; 34 | WHEN (A < B); 35 | do _ <- (write [: c <- #b false]); 36 | ret (#Ctt) 37 | ). 38 | Defined. 39 | 40 | Definition mod : Action Phi Tunit := fun V => OrElse _ _ _ (iterate _) (done _). 41 | 42 | Inductive Ty : Type := 43 | | RET : Word.T n -> Ty 44 | | ST : Word.T n -> Word.T n -> Ty. 45 | Hint Unfold Phi. 46 | 47 | Program Definition start (x : Ty) : eval_state Phi := 48 | match x with 49 | | RET a => 50 | [ :: false; a; a] 51 | | ST a b => 52 | [ :: true; a; b] 53 | end%dlist. 54 | 55 | Definition finish (x : eval_state Phi) : Ty := 56 | let c := DList.hd x in 57 | let a := DList.hd (DList.tl x) in 58 | let b := DList.hd (DList.tl (DList.tl x)) in 59 | match c with 60 | | true => ST a b 61 | | false => RET a 62 | end. 63 | 64 | Definition st0 x y := start (ST (Word.repr n x) (Word.repr n y)). 65 | 66 | Fixpoint iter {A} (f : A -> A) n := 67 | match n with 68 | | 0 => id 69 | | S n => fun x => f (iter f n x) 70 | end%nat. 71 | 72 | Definition show start k := iter (fun st => Next _ st mod) k start. 73 | 74 | End t. 75 | 76 | Eval compute in show 16 (st0 16 17 3) 7. 77 | End Ex2. 78 | -------------------------------------------------------------------------------- /attic/Moore.v: -------------------------------------------------------------------------------- 1 | Require Import Common. 2 | 3 | Module WithFailure. 4 | Record T (I O sigma : Type) := 5 | { 6 | lambda : sigma -> O; 7 | delta : sigma -> I -> option sigma 8 | }. 9 | 10 | Arguments lambda {I O sigma} t _. 11 | Arguments delta {I O sigma} t _ _. 12 | 13 | Fixpoint iterate {I O sigma} (M : T I O sigma) x (ins : nat -> I) k : option sigma := 14 | match k with 15 | | 0 => x 16 | | S n => 17 | do st <- (iterate M x ins n); 18 | (delta M) st (ins n) 19 | end. 20 | 21 | Definition outputs {I O sigma} (M : T I O sigma) x (ins : nat -> I) k : option O := 22 | do st <- iterate M x ins k; 23 | Some ((lambda M) st). 24 | 25 | End WithFailure. 26 | 27 | Module Relation. 28 | Record T (I O sigma : Type) := 29 | { 30 | lambda : sigma -> O; 31 | delta : sigma -> I -> sigma -> Prop 32 | }. 33 | 34 | Arguments lambda {I O sigma} t _. 35 | Arguments delta {I O sigma} t _ _ _. 36 | 37 | Fixpoint iterate {I O sigma} (M : T I O sigma) (ins : nat -> I) k : relation sigma := 38 | match k with 39 | | 0 => fun x y => True 40 | | S n => 41 | fun x z => 42 | exists y, 43 | iterate M ins n x y /\ 44 | (delta M) x (ins n) z 45 | end. 46 | 47 | End Relation. 48 | 49 | -------------------------------------------------------------------------------- /attic/Mult.v: -------------------------------------------------------------------------------- 1 | Require Import Common DList Core Front. 2 | 3 | Require ZArith. Open Scope Z_scope. 4 | 5 | Section t. 6 | Variable W : nat. 7 | Notation NUM := (Tint W). 8 | 9 | Definition Phi : state := (Treg NUM :: Treg NUM :: Treg NUM :: nil)%list. 10 | 11 | Notation N := (var_0 : var Phi (Treg NUM)). 12 | Notation M := (var_S (var_0) : var Phi (Treg NUM)). 13 | Notation R := (var_S (var_S (var_0)) : var Phi (Treg NUM)). 14 | 15 | Notation "'If' c 'then' b1 'else' b2 " := 16 | (OrElse _ _ _ (WHEN (c)%expr ; b1)%action b2) 17 | (no associativity, at level 200, c,b1,b2 at level 200). 18 | 19 | Definition mult : Action Phi Tunit. intros V. 20 | refine ( do n <- ! N; 21 | do m <- ! M; 22 | do acc <- ! R; 23 | ( 24 | If (m = #i 0) 25 | then 26 | ret (#Ctt) 27 | else 28 | ( 29 | do _ <- M ::= (m - (#i 1)) ; 30 | do _ <- R ::= (acc + n); 31 | ret (#Ctt)) 32 | ))%action. 33 | Defined. 34 | 35 | End t. 36 | 37 | 38 | -------------------------------------------------------------------------------- /attic/TRS_to_ATS.v: -------------------------------------------------------------------------------- 1 | Require TRS. 2 | Require ATS. 3 | 4 | 5 | 6 | Require Import TRS. 7 | Require Import Common. 8 | 9 | Variable mem env1 env2 : list type2. 10 | Variable lhs : pattern2_vector mem env1. 11 | Variable w : where_clause env1 env2. 12 | 13 | 14 | (* Fixpoint var_lift t G (x : var G t) : member t (insertAt t' G n) := *) 15 | (* match x with *) 16 | (* | HFirst G' => match n return member t (insertAt t' (t :: G') n) with *) 17 | (* | O => HNext HFirst *) 18 | (* | _ => HFirst *) 19 | (* end *) 20 | (* | HNext t'' G' x' => match n return member t (insertAt t' (t'' :: G') n) with *) 21 | (* | O => HNext (HNext x') *) 22 | (* | S n' => HNext (liftVar x' t' n') *) 23 | (* end *) 24 | (* end. *) 25 | 26 | (* Arguments expr1 : clear implicits. *) 27 | (* Arguments expr1 E t. *) 28 | 29 | (* Section test. *) 30 | 31 | (* Definition lift_expr1 t q t' : expr1 q t' -> expr1 (t::q) t'. Admitted. *) 32 | 33 | (* Definition replacement E t := match t with *) 34 | (* | Treg t => expr1 E t *) 35 | (* | _ => var E t *) 36 | (* end. *) 37 | 38 | (* Definition subst E F := dlist (replacement E) F. *) 39 | 40 | (* Definition apply_subst E F t (s : subst E F) (e : expr1 E t) : expr1 F t. *) 41 | (* induction e. *) 42 | (* eapply Eprim; eauto. *) 43 | (* eapply dlist_map. *) 44 | 45 | (* refine (let f := fix f t : expr1 F t := *) 46 | 47 | (* match t with *) 48 | 49 | 50 | (* match e with *) 51 | (* | Eprim args res f x => _ *) 52 | (* | Econstant c => _ *) 53 | (* | Eunion id fl case => _ *) 54 | (* | Etuple l v => _ *) 55 | 56 | (* | Eget t v => _ *) 57 | (* | Eget_regfile size t v n x => _ *) 58 | (* | Efirst n t v => _ *) 59 | (* | Eisfull n t v => _ *) 60 | (* | Eisempty n t v => _ *) 61 | 62 | (* end *) 63 | (* in f t e *) 64 | (* ). *) 65 | (* Focus 2. *) 66 | (* apply Econstant. *) 67 | (* induction e. *) 68 | 69 | (* Definition replacement_fst E a : replacement (a :: E) a. *) 70 | (* destruct a; try apply var_0. apply Eget. apply var_0. *) 71 | (* Defined. *) 72 | 73 | (* Definition replacement_lift a E t : replacement E t -> replacement (a::E) t. *) 74 | (* intros. unfold replacement in *. destruct t. *) 75 | (* apply lift_expr1. *) 76 | (* apply X. *) 77 | (* apply var_S; auto. *) 78 | (* apply var_S; auto. *) 79 | (* Defined. *) 80 | 81 | 82 | (* Definition subst_id E : subst E E. *) 83 | (* induction E. *) 84 | (* constructor. *) 85 | (* constructor. *) 86 | (* apply replacement_fst. *) 87 | (* unfold subst in IHE. *) 88 | (* eapply dlist_map. 2: apply IHE. *) 89 | (* apply replacement_lift. *) 90 | (* Defined. *) 91 | 92 | (* Definition build_subst t E F : *) 93 | (* pattern1 F t -> @expr1 E t -> *) 94 | (* subst E F. *) 95 | (* Proof. *) 96 | (* intros p e. *) 97 | (* unfold subst. *) 98 | (* inversion p; subst. *) 99 | (* constructor. apply e. *) 100 | (* constructor. *) 101 | (* constructor. *) 102 | (* constructor. *) 103 | (* admit. *) 104 | (* induction X. *) 105 | (* constructor. *) 106 | (* admit. *) 107 | (* Defined. *) 108 | 109 | (* Definition build_subst_where E F (W : where_clause E F) : subst E F. *) 110 | (* Proof. *) 111 | (* induction W. *) 112 | (* apply subst_id. *) 113 | 114 | (* assert (T := build_subst _ _ _ p e). *) 115 | 116 | (* Definition subst_combine E F G : *) 117 | (* subst (E ++ F) G -> *) 118 | (* subst E F -> *) 119 | (* subst E G. *) 120 | (* intros. *) 121 | (* eapply dlist_map in X. apply X. *) 122 | (* intros. clear - X1 X0. *) 123 | (* unfold replacement in *. *) 124 | (* destruct x. *) 125 | (* Definition apply_subst : *) 126 | 127 | (* Definition t : dlist (fun t => match t with *) 128 | (* | Treg t => @expr1 mem t *) 129 | (* | _ => var mem t *) 130 | (* end *) 131 | (* ) env1. *) 132 | (* induction lhs. *) 133 | (* apply dlist_nil. *) 134 | (* Definition zob E t : pattern2 E t -> *) 135 | (* dlist (fun t => match t with *) 136 | (* | Treg t => @expr1 mem t *) 137 | (* | _ => var mem t *) 138 | (* end) E. *) 139 | (* Admitted. *) 140 | (* apply zob in p. *) 141 | (* induction E. *) 142 | (* simpl. *) 143 | 144 | (* eapply dlist_map. intros. 2:apply IHp. *) 145 | (* simpl in *. *) 146 | (* destruct x; auto using var_S, lift_expr1. *) 147 | (* simpl. *) 148 | 149 | (* constructor. 2: apply IHE. *) 150 | 151 | (* simpl. *) 152 | (* apply *) 153 | (* simpl. *) 154 | (* Definition t : forall t, var env1 (Treg t) -> @expr1 mem t. *) 155 | (* (* compute the part that depend on the pattern_vector *) *) 156 | (* induction lhs. *) 157 | (* intros. inversion X. *) 158 | (* intros t' v. *) 159 | 160 | (* Definition test : forall T P E F (t : T), *) 161 | (* (var E t -> P t) -> *) 162 | (* (var F t -> P t) -> *) 163 | (* (var (E ++ F) t -> P t). *) 164 | (* induction E. simpl. tauto. *) 165 | (* simpl. intros. *) 166 | (* induction X1. *) 167 | (* tauto. destruct X1. *) 168 | (* induction *) 169 | 170 | (* simpl. *) 171 | (* Inductive pattern : list type2 -> list type0 -> Type := *) 172 | (* Pvar1 : forall t , pattern [Treg (T01 t)] [t] *) 173 | (* | Phole1 : forall t, pattern [] [t] *) 174 | (* | Pconstant : forall c : Common.constant, *) 175 | (* pattern [] ([(Common.cst_ty c)]) *) 176 | (* | Ptuple : forall (E : list type2) (l : list type1), *) 177 | (* pattern_vector E l -> pattern E (Ttuple l) *) 178 | (* with pattern_disjunct : list type2 -> type1_id_list -> Type := *) 179 | (* pattern_disjunct_hd : forall (E : list type2) *) 180 | (* (id : Common.ident) (t : type1) *) 181 | (* (q : type1_id_list), *) 182 | (* pattern E t -> pattern_disjunct E (id of t :: q) *) 183 | (* | pattern_disjunct_tl : forall (E : list type2) *) 184 | (* (id : Common.ident) (t : type1) *) 185 | (* (q : type1_id_list), *) 186 | (* pattern_disjunct E q -> *) 187 | (* pattern_disjunct E (id of t :: q) *) 188 | (* with pattern_vector : list type2 -> list type1 -> Type := *) 189 | (* pattern_vector_nil : pattern_vector [] [] *) 190 | (* | pattern_vector_cons : forall (E F : list type2) *) 191 | (* (t : type1) (q : list type1), *) 192 | (* pattern E t -> *) 193 | (* pattern_vector F q -> *) 194 | (* pattern_vector (E ++ F) (t :: q). *) 195 | 196 | (* Inductive type1 : Type := *) 197 | (* T01 : Common.type0 -> type1 *) 198 | (* | Ttuple : list type1 -> type1 *) 199 | (* with type1_id_list : Type := *) 200 | (* type1_id_list_nil : type1_id_list *) 201 | (* | type1_id_list_cons : Common.ident -> *) 202 | (* type1 -> type1_id_list -> type1_id_list *) 203 | 204 | (* Definition V : ATS.transition *) 205 | -------------------------------------------------------------------------------- /attic/draw_sorter.ml: -------------------------------------------------------------------------------- 1 | module PS = struct 2 | open Printf 3 | 4 | let newpath () = printf "newpath\n" 5 | let stroke () = printf "stroke\n" 6 | let moveto (x,y) = printf "%i %i moveto\n" x y 7 | let lineto (x,y) = printf "%i %i lineto\n" x y 8 | let line a b = 9 | newpath (); 10 | moveto a; 11 | lineto b; 12 | stroke () 13 | 14 | let circle (x,y) r = () 15 | (* printf "%i %i %f 0 360 arc closepath\nfill\n" x y r *) 16 | 17 | let header bl ur = 18 | printf "%%!PS-Adobe-3.0 EPSF-3.0\n"; 19 | printf "%%%%BoundingBox: %i %i %i %i\n" (fst bl) (snd bl) (fst ur) (snd ur); 20 | printf "newpath\n" 21 | 22 | let footer () = 23 | printf "stroke\nshowpage\n" 24 | end 25 | 26 | module SVG = struct 27 | 28 | open Printf 29 | 30 | let line (x1,y1) (x2,y2) = 31 | printf "\n" 32 | x1 y1 x2 y2 33 | 34 | let header bl ur = 35 | printf "\n" 36 | 37 | let footer () = 38 | printf "\n" 39 | end 40 | 41 | 42 | type 'a tree = 43 | | L of 'a 44 | | N of 'a tree * 'a tree 45 | 46 | let rec reverse t = 47 | match t with 48 | | L x -> L x 49 | | N (l,r) -> N (reverse r, reverse l) 50 | 51 | let left t = 52 | match t with 53 | | N (l,_) -> l 54 | | _ -> assert false 55 | 56 | let right t = 57 | match t with 58 | | N (l,_) -> l 59 | | _ -> assert false 60 | 61 | module M 62 | ( I : sig 63 | type t 64 | val cmp : t -> t -> t * t 65 | val init : int -> t 66 | end) = 67 | struct 68 | include I 69 | let rec build n i = 70 | match n with 71 | 0 -> L (init i), i+1 72 | | n -> let (l,i) = build (n - 1) i in 73 | let (r,i) = build (n - 1) i in 74 | N (l,r), i 75 | ;; 76 | let build n = fst (build n 0) ;; 77 | 78 | 79 | let rec min_max_swap l r = 80 | match l,r with 81 | | L x, L y -> let (a,b) = cmp x y in L a, L b 82 | | N (l1,r1), N (l2,r2) -> 83 | let (a,b) = min_max_swap l1 l2 in 84 | let (c,d) = min_max_swap r1 r2 in 85 | (N (a,c), N (b,d)) 86 | | _, _ -> assert false 87 | 88 | let rec merge t = 89 | match t with 90 | | L x -> t 91 | | N (l,r) -> let (a,b) = min_max_swap l r in 92 | N (merge a, merge b) 93 | 94 | let rec sort t = 95 | match t with 96 | | L x -> t 97 | | N (l,r) -> merge (N (sort l, reverse (sort r))) 98 | end 99 | 100 | let comparators = Array.create 32 [] 101 | 102 | module T = struct 103 | type t = 104 | { 105 | value : int; 106 | depth : int 107 | } 108 | let f (x,y) = 109 | x*10 + 100, y * 10 + 50 110 | 111 | let print a b = 112 | let x = max a.depth b.depth in 113 | let ya = a.value in 114 | let yb = b.value in 115 | comparators.(x) <- (ya,yb) :: comparators.(x) 116 | 117 | let cmp= 118 | (fun x y -> 119 | print x y; 120 | let min x y = 121 | {value = min x.value y.value; depth = 1 + max x.depth y.depth} 122 | and max x y = 123 | {value = max x.value y.value; depth = 1 + max x.depth y.depth} 124 | in 125 | (min x y, max x y)) 126 | 127 | let init x = {value = x; depth = 0} 128 | end 129 | 130 | module Test16 = M (T) 131 | 132 | let _ = Test16.(sort (build 4)) 133 | 134 | (* take a list of segment, and stage them for display *) 135 | let stage l = 136 | let intersect (i,j) (x,y) = 137 | let (i,j) = min i j, max i j in 138 | let (x,y) = min x y, max x y in 139 | assert (i <= j && x <= y); 140 | 141 | (x <= i && i <= y) || (x <= j && j <= y) 142 | in 143 | let rec add s = function 144 | | [] -> [[s]] 145 | | l1 :: q -> 146 | if List.exists (fun t -> intersect s t) l1 147 | then l1 :: add s q 148 | else (s::l1) :: q 149 | in 150 | List.fold_right add l [] 151 | 152 | let stages = Array.map stage comparators 153 | 154 | (* what is the maximum depth of one stage *) 155 | let m = Array.fold_left (fun acc x -> max acc (List.length x)) 0 stages 156 | 157 | (* how many stages do we have *) 158 | let nb_stage = let r = ref 0 in Array.iteri (fun i x -> if x <> [] then r := i;) stages; !r 159 | 160 | (* some numerical constants for drawing *) 161 | let dx = m * 2 + 10 162 | let dy = 10 163 | 164 | let bl = (0,0) 165 | let f (x,y) = x + 20, y * dy 166 | let ur = (40 + nb_stage * dx , 0 + 16 * dy) 167 | 168 | (* print the postscript header *) 169 | let _ = SVG.header bl ur 170 | 171 | 172 | 173 | (* draw the comparators *) 174 | let _ = 175 | for i = 0 to Array.length stages - 1 do 176 | let rec aux r = function 177 | | [] -> () 178 | | l :: q -> 179 | List.iter (fun (ya,yb) -> 180 | let x = i * dx + r * 2 in 181 | let a = (x,ya) in 182 | let b = (x,yb) in 183 | SVG.line (f a) (f b); 184 | ) l; 185 | aux (r+1) q 186 | in 187 | aux 0 ( stages.(i) ) 188 | done 189 | 190 | (* draw the horizontal lines *) 191 | let _ = 192 | for i = 0 to 15 do 193 | SVG.line (0, i * dy) (nb_stage * dx + 40,i * dy) 194 | done 195 | 196 | (* ends the drawing *) 197 | let _ = SVG.footer () 198 | 199 | -------------------------------------------------------------------------------- /examples/.gitignore: -------------------------------------------------------------------------------- 1 | extracted/* 2 | _build/ 3 | -------------------------------------------------------------------------------- /examples/Add.v: -------------------------------------------------------------------------------- 1 | (** Examples.Add : A Von Neumann adder. *) 2 | Require Import Common Core Front ZArith. 3 | 4 | Fixpoint pow2 k := (match k with O => 1 | S p => pow2 p + pow2 p end)%nat. 5 | 6 | Notation "[2^ n ]" := (pow2 n). 7 | 8 | (** A divide and conquer adder (Von Neumann) *) 9 | Section s. 10 | 11 | Variable V : type -> Type. 12 | Open Scope Z_scope. 13 | Fixpoint add {Phi} n (x : expr V (Tint [2^ n])) (y : expr V (Tint [2^ n])) 14 | : action Phi V (Ttuple [Tbool; Tbool; Tint [2^ n]; Tint [2^ n]]) := 15 | match n 16 | return 17 | expr V (Tint [2^ n]) -> 18 | expr V (Tint [2^ n]) -> 19 | action Phi V (Ttuple [Tbool; Tbool; Tint [2^ n]; Tint [2^ n]]) 20 | with 21 | | 0%nat => fun x y => 22 | ret [tuple ((x = #i 1) || (y = #i 1)), (* propagate *) 23 | ((x = #i 1) && (y = #i 1)), (* generate *) 24 | x + y, (* s *) 25 | x + y + #i 1 ]%expr (* t *) 26 | | S n => fun x y => 27 | ( 28 | do xL <~ low x; 29 | do xH <~ high x; 30 | do yL <~ low y; 31 | do yH <~ high y; 32 | do rL <- add n xL yL; 33 | do rH <- add n xH yH; 34 | do (pL, gL, sL, tL) <~ rL; 35 | do (pH, gH, sH, tH) <~ rH; 36 | do sH' <~ (Emux (gL) (tH) (sH))%expr; 37 | do tH' <~ (Emux (pL) (tH) (sH))%expr; 38 | do pH' <~ (gH || (pH && pL))%expr; 39 | do gH' <~ (gH || (pH && gL))%expr; 40 | ret [tuple pH', 41 | gH', 42 | combineLH sL sH', 43 | combineLH tL tH'] 44 | ) 45 | end%expr%action x y. 46 | End s. 47 | 48 | Arguments Front.Close {Var} Phi {T U} c. 49 | 50 | Definition generator n : Action ([Tinput (Tint [2^n]); Tinput (Tint [2^n])]%list) (Ttuple [ B; B; Int [2^n]; Int [2^n]])%list. 51 | intros V. 52 | apply (Front.Close ([Tinput (Tint [2^n])]%list)). 53 | intros x. 54 | apply (Front.Close ([]%list)). 55 | intros y. 56 | apply (add _ _ (Evar x) (Evar y)) . 57 | Defined. 58 | -------------------------------------------------------------------------------- /examples/Driver.v: -------------------------------------------------------------------------------- 1 | Require SynthExamples.Add SynthExamples.Stack SynthExamples.Sorter. 2 | 3 | (** Produces an adder for numbers of size [2^n] *) 4 | Definition adder n := (Compiler.Fesic _ _ (Add.generator n)). 5 | 6 | (** Produces a sorter core for [2^n] numbers. *) 7 | Definition sorter n := (Compiler.Fesic _ _ (Sorter.generator 4 n)). 8 | 9 | (** Produces the stack machine core. Parameters must be set in the corresponding Coq file. *) 10 | Definition stack := Stack.t. 11 | -------------------------------------------------------------------------------- /examples/Extraction.v: -------------------------------------------------------------------------------- 1 | Require Driver. 2 | 3 | Cd "extracted". 4 | 5 | Set Extraction AccessOpaque. 6 | 7 | Extraction Blacklist String List. 8 | 9 | Extract Inductive bool => bool [ true false ]. 10 | Extract Inductive option => option [ Some None ]. 11 | Extract Inductive unit => unit [ "()" ]. 12 | Extract Inductive list => list [ "[]" "( :: )" ]. 13 | Extract Inductive prod => "( * )" [ "" ]. 14 | 15 | (** NB: The "" above is a hack, but produce nicer code than "(,)" *) 16 | 17 | (** Mapping sumbool to bool and sumor to option is not always nicer, 18 | but it helps when realizing stuff like [lt_eq_lt_dec] *) 19 | 20 | Extract Inductive sumbool => bool [ true false ]. 21 | Extract Inductive sumor => option [ Some None ]. 22 | 23 | (** Restore lazyness of andb, orb. 24 | NB: without these Extract Constant, andb/orb would be inlined 25 | by extraction in order to have lazyness, producing inelegant 26 | (if ... then ... else false) and (if ... then true else ...). 27 | *) 28 | 29 | Extract Inlined Constant andb => "(&&)". 30 | Extract Inlined Constant orb => "(||)". 31 | 32 | Extract Inductive nat => int [ "0" "Pervasives.succ" ] 33 | "(fun fO fS n -> if n=0 then fO () else fS (n-1))". 34 | 35 | (** Efficient (but uncertified) versions for usual [nat] functions *) 36 | 37 | Extract Constant plus => "(+)". 38 | Extract Constant pred => "fun n -> max 0 (n-1)". 39 | Extract Constant minus => "fun n m -> max 0 (n-m)". 40 | Extract Constant mult => "( * )". 41 | Extract Inlined Constant max => max. 42 | Extract Inlined Constant min => min. 43 | (*Extract Inlined Constant nat_beq => "(=)".*) 44 | Extract Inlined Constant EqNat.beq_nat => "(=)". 45 | Extract Inlined Constant EqNat.eq_nat_decide => "(=)". 46 | 47 | Extract Inlined Constant Peano_dec.eq_nat_dec => "(=)". 48 | 49 | Extract Constant Compare_dec.nat_compare => 50 | "fun n m -> if n=m then Eq else if n "(<=)". 52 | Extract Inlined Constant Compare_dec.le_lt_dec => "(<=)". 53 | Extract Constant Compare_dec.lt_eq_lt_dec => 54 | "fun n m -> if n>m then None else Some (n "fun n -> n mod 2 = 0". 57 | Extract Constant Div2.div2 => "fun n -> n/2". 58 | 59 | Separate Extraction Driver. 60 | 61 | -------------------------------------------------------------------------------- /examples/Makefile: -------------------------------------------------------------------------------- 1 | ROOT := .. 2 | MODULES := Stack Sorter Add Driver Extraction 3 | 4 | VS := $(MODULES:%=%.v) 5 | 6 | .PHONY: coq clean backend 7 | 8 | backend: coq 9 | ocamlbuild -lib unix -Is extracted,backend generators.native 10 | 11 | all: coq backend 12 | 13 | demo: backend 14 | # generate demo cores in the directory verilog/ 15 | mkdir -p verilog/ 16 | ./generators.native -adder 4 17 | ./generators.native -sorter 4 18 | ./generators.native -stack 19 | 20 | coq: Makefile.coq 21 | $(MAKE) -f Makefile.coq 22 | 23 | Makefile.coq: Makefile $(VS) 24 | coq_makefile -R $(ROOT)/src Synthesis \ 25 | $(VS) -o Makefile.coq 26 | 27 | clean:: Makefile.coq 28 | $(MAKE) -f Makefile.coq clean 29 | rm -f Makefile.coq .depend 30 | ocamlbuild -clean 31 | rm -f extracted/* 32 | -------------------------------------------------------------------------------- /examples/README.txt: -------------------------------------------------------------------------------- 1 | This directory contains our various examples, as well as our prototype 2 | OCaml back-end. 3 | 4 | - Add.v contains the definition of a parametric divide and conquer 5 | adder (no proof). 6 | - Sorter.v contains the definition and the proof of correction of the 7 | sorter core. 8 | - Stack.v contains the definition and the proof of correction of the 9 | stack machine. (fibonacci.ml contains a toy compiler from IMP to the 10 | byte-code that is understood by the stack machine.) 11 | - test_* contains examples of the outputs of the compiler on the 12 | aforementionned examples, along with test drivers that makes it 13 | possible to execute them with iVerilog. 14 | - backend/ contains the code that implements the OCaml backend, as 15 | well as the OCaml driver. 16 | 17 | 18 | Running [make] in this directory build the OCaml back-end. This 19 | produces an executable [generators.native] that generates cores 20 | corresponding to the aforementionned examples. We refer the author to 21 | the examples we put in the test_/* directory for guidance about how to 22 | use these cores. [make demo] rebuilds these tests in the [verilog/] 23 | directory. 24 | 25 | -------------------------------------------------------------------------------- /examples/backend/generators.ml: -------------------------------------------------------------------------------- 1 | let version = "0.1" 2 | 3 | let compile tag name x = 4 | let t = Unix.gettimeofday () in 5 | Printf.printf "Compilation of %s\n%!" name; 6 | match x with 7 | Some x -> 8 | let b = (Backend.mk_block tag name x) in 9 | begin 10 | Backend.dump b; 11 | Printf.printf "done (%fs,%i)\n%!" (Unix.gettimeofday () -. t) (List.length b.Backend.bindings) 12 | end 13 | | None -> Format.printf "Failed" 14 | 15 | 16 | 17 | let args = ["-adder", 18 | Arg.Int (fun n -> 19 | let tag = Printf.sprintf "adder%i_%s" n version in 20 | compile tag "Adder" (Driver.adder n)), 21 | "compile the adder core for numbers of size [2^n]"; 22 | 23 | "-sorter", 24 | Arg.Int (fun n -> 25 | let tag = Printf.sprintf "sorter%i_%s" n version in 26 | compile tag "Sorter" (Driver.sorter n)), 27 | "compile a sorter core for [2^n] arguments of bitwidth 4 (hard-coded)"; 28 | 29 | "-stack", 30 | Arg.Unit (fun _ -> 31 | let tag = Printf.sprintf "stack_%s" version in 32 | compile tag "Stack" Driver.stack), 33 | "compiler the stack core"; 34 | ] 35 | 36 | let usage = Printf.sprintf "run %s with the right option to produce the corresponding core" Sys.argv.(0) 37 | 38 | let _ = if Array.length Sys.argv = 1 then Arg.usage args usage 39 | let _ = Arg.parse args (fun _ -> ()) usage 40 | -------------------------------------------------------------------------------- /examples/test_adder/Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | iverilog main.v Test.v Adder.v -o adder.exe 3 | 4 | clean: 5 | rm adder.exe 6 | 7 | -------------------------------------------------------------------------------- /examples/test_adder/README: -------------------------------------------------------------------------------- 1 | Test the divide and conquer adder that was generated (using a for 2 | loop, to iterate test cases). 3 | -------------------------------------------------------------------------------- /examples/test_adder/Test.v: -------------------------------------------------------------------------------- 1 | module Test(clk, rst_n); 2 | input clk, rst_n; 3 | reg [15:0] a, b ; // inputs 4 | 5 | reg [15:0] s, t ; //results with and without carry in 6 | reg p, g; // propagate and generate bits 7 | 8 | wire [33:0] res; 9 | wire guard; 10 | 11 | always@(posedge clk) 12 | begin 13 | if(!rst_n) 14 | begin 15 | a <= 0; 16 | b <= 1; 17 | end 18 | else 19 | begin 20 | {p,g,s,t} <= res; 21 | #10 22 | $display("begin"); 23 | $display("a: %b;\tb: %b", a, b); 24 | $display("s: %b;\tt: %b;\tp: %b;\t g: %b", s,t,p,g); 25 | $display("res: %b", res); 26 | $display("guard: %b", guard); 27 | $display("end"); 28 | a <= a + 1; 29 | if (a == 15'b111111111111111) 30 | b <= b << 1; 31 | $stop; 32 | end 33 | end 34 | 35 | always@(posedge clk) 36 | begin 37 | if(rst_n) 38 | begin 39 | 40 | end 41 | end 42 | 43 | 44 | Adder foo (clk, rst_n, guard, res, a, b); 45 | 46 | 47 | endmodule 48 | -------------------------------------------------------------------------------- /examples/test_adder/main.v: -------------------------------------------------------------------------------- 1 | module top; 2 | reg clk; 3 | reg rst_n; 4 | 5 | initial 6 | begin 7 | clk = 0; 8 | rst_n = 0; 9 | #60 rst_n = 1; 10 | end 11 | 12 | always 13 | #50 clk = ~ clk; 14 | 15 | 16 | Test localName(clk, rst_n); 17 | endmodule 18 | -------------------------------------------------------------------------------- /examples/test_sorter/Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | iverilog main.v Test.v Sorter.v -o sorter.exe 3 | 4 | clean: 5 | rm sorter.exe 6 | 7 | -------------------------------------------------------------------------------- /examples/test_sorter/README.txt: -------------------------------------------------------------------------------- 1 | Test the divide and conquer adder that was generated (using a for 2 | loop, to iterate test cases). 3 | 4 | Note that we use the following convention in our Coq representation: 5 | given the input sequence 6 | 7 | input 1101100100011100100110011000001100010110100010010100101010000010 8 | 9 | that corresponds to 10 | 11 | 0: 2 (0010) 12 | 1: 8 (1000) 13 | 2: 10 (1010) 14 | 3: 4 (0100) 15 | 4: 9 (1001) 16 | 5: 8 (1000) 17 | 6: 6 (0110) 18 | 7: 1 (0001) 19 | 8: 3 (0011) 20 | 9: 8 (1000) 21 | 10: 9 (1001) 22 | 11: 9 (1001) 23 | 12: 12 (1100) 24 | 13: 1 (0001) 25 | 14: 9 (1001) 26 | 15: 13 (1101) 27 | 28 | we produce the following output sequence 29 | 30 | output 0001000100100011010001101000100010001001100110011001101011001101 31 | 32 | that corresponds to 33 | 34 | 0: 13 (1101) 35 | 1: 12 (1100) 36 | 2: 10 (1010) 37 | 3: 9 (1001) 38 | 4: 9 (1001) 39 | 5: 9 (1001) 40 | 6: 9 (1001) 41 | 7: 8 (1000) 42 | 8: 8 (1000) 43 | 9: 8 (1000) 44 | 10: 6 (0110) 45 | 11: 4 (0100) 46 | 12: 3 (0011) 47 | 13: 2 (0010) 48 | 14: 1 (0001) 49 | 15: 1 (0001) 50 | 51 | This is expected: our encoding of tuples in Fe-Si considers the 52 | 4'b0001 as the first element of the 16-uple. 53 | -------------------------------------------------------------------------------- /examples/test_sorter/Test.v: -------------------------------------------------------------------------------- 1 | module Test(clk, rst_n); 2 | input clk, rst_n; 3 | 4 | parameter size = 16; 5 | 6 | wire [63:0] isrc; 7 | reg [3:0] src [15:0]; 8 | assign isrc = {src[15], src[14], src[13], src[12], src[11], src[10], src[9], src[8], 9 | src[7], src[6], src[5], src[4], src[3], src[2], src[1], src[0]}; 10 | 11 | wire [63:0] itgt; 12 | wire [3:0] tgt [15:0]; 13 | assign {tgt[15], tgt[14], tgt[13], tgt[12], tgt[11], tgt[10], tgt[9], tgt[8], 14 | tgt[7], tgt[6], tgt[5], tgt[4], tgt[3], tgt[2], tgt[1], tgt[0]} = itgt; 15 | 16 | wire guard; 17 | 18 | integer index; // Used for initialisations 19 | 20 | Sorter foo (clk, rst_n, guard, itgt, isrc); 21 | 22 | integer seed = 255; 23 | 24 | initial 25 | begin 26 | for(index = 0; index < size; index = index + 1) 27 | begin 28 | src[index] <= $random(seed); 29 | end 30 | end 31 | 32 | always@(posedge clk) 33 | begin 34 | if(!rst_n) 35 | begin 36 | end 37 | else 38 | begin 39 | // display the current input 40 | $display("guard:%b", guard); 41 | 42 | $display("input\t%b\n", isrc); 43 | for(index = 0; index < size; index = index + 1) 44 | begin 45 | $display("%d:\t%d\t(%b)", index, src[index], src[index]); 46 | end 47 | 48 | $display("output\t%b\n", itgt); 49 | for(index = 0; index < size; index = index + 1) 50 | begin 51 | $display("%d:\t%d\t(%b)", index, tgt[index], tgt[index]); 52 | end 53 | $stop; 54 | end 55 | end 56 | 57 | 58 | 59 | endmodule 60 | -------------------------------------------------------------------------------- /examples/test_sorter/main.v: -------------------------------------------------------------------------------- 1 | module top; 2 | reg clk; 3 | reg rst_n; 4 | 5 | initial 6 | begin 7 | clk = 0; 8 | rst_n = 0; 9 | #60 rst_n = 1; 10 | end 11 | 12 | always 13 | #50 clk = ~ clk; 14 | 15 | 16 | Test localName(clk, rst_n); 17 | endmodule 18 | -------------------------------------------------------------------------------- /examples/test_stack/Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | iverilog main.v Test.v Stack.v -o stack.exe 3 | 4 | clean: 5 | rm stack.exe 6 | 7 | -------------------------------------------------------------------------------- /examples/test_stack/README.txt: -------------------------------------------------------------------------------- 1 | Showcase the implementation of the stack machine. 2 | 3 | The machine is loaded with code that computes a given value of the 4 | Fibonacci sequence. The value is stored in the program bitmap. Use the 5 | ocaml program fibonacci.ml to generate other program bitmaps for other 6 | values. 7 | 8 | Our semantics predics that the output result for the initial value 10 9 | is as follows 10 | 11 | pc:36 sp:0 12 | code at pc: 12'b000000001011 13 | stack[0]: 55 14 | stack[1]: 10 15 | stack[2]: 0 16 | stack[3]: 0 17 | stack[4]: 0 18 | stack[5]: 0 19 | stack[6]: 0 20 | stack[7]: 0 21 | 22 | store [0]: 55 23 | store [1]: 55 24 | store [2]: 34 25 | store [3]: 55 26 | store [4]: 10 27 | store [5]: 0 28 | store [6]: 0 29 | store [7]: 0 30 | 31 | Our simulated executions indeed produces the following result: 32 | pc: 36 sp: 0 33 | code at pc:000000001011 34 | opcode:000000001011 35 | guard: 1, value: 0 36 | stack[ 0]: 55 37 | stack[ 1]: 10 38 | stack[ 2]: 0 39 | stack[ 3]: 0 40 | stack[ 4]: 0 41 | stack[ 5]: 0 42 | stack[ 6]: 0 43 | stack[ 7]: 0 44 | 45 | store [ 0]: 55 46 | store [ 1]: 55 47 | store [ 2]: 34 48 | store [ 3]: 55 49 | store [ 4]: 10 50 | store [ 5]: 0 51 | store [ 6]: 0 52 | store [ 7]: 0 53 | -------------------------------------------------------------------------------- /examples/test_stack/Test.v: -------------------------------------------------------------------------------- 1 | module Test(clk, rst_n); 2 | input clk, rst_n; 3 | 4 | wire res; 5 | wire guard; 6 | 7 | Stack foo (clk, rst_n, guard, res); 8 | 9 | // always@(posedge clk) 10 | // begin 11 | // $display("res: %b\tguard: %b", res, guard); 12 | // end 13 | 14 | 15 | 16 | 17 | endmodule 18 | -------------------------------------------------------------------------------- /examples/test_stack/main.v: -------------------------------------------------------------------------------- 1 | module top; 2 | reg clk; 3 | reg rst_n; 4 | 5 | initial 6 | begin 7 | clk = 0; 8 | rst_n = 0; 9 | // #30 rst_n = 1; 10 | end 11 | 12 | always 13 | #100 clk = ~ clk; 14 | 15 | 16 | Test localName(clk, rst_n); 17 | endmodule 18 | -------------------------------------------------------------------------------- /notes.txt: -------------------------------------------------------------------------------- 1 | 08/27/2012 2 | timing for divide and conquer add: 3 | - 5 size 470 time 10s 4 | - 6 size 942 time 62s 5 | - 7 size 1886 time 408s 6 | - 8 size 3774 time 2836s 7 | 8 | With better bdds 9 | - 5 size 470 time 10s 10 | - 6 size 942 time 61s 11 | - 7 size 1886 time 392s 12 | 13 | With better bdds 14 | - 5 size 470 time 10s 15 | - 6 size 942 time 58s 16 | - 7 size 1886 time 372s 17 | 18 | 19 | 06/01/2012 Discussion with Adam 20 | 21 | - Mentionned the semantics issues with double-update errors treated as 22 | guard errors. This has some impact on the number of multiplexers at 23 | the end (and on the semantics of course, because more programs are 24 | correct). 25 | 26 | - Mentionned the fact that there shall be no bind errors (which were 27 | real errors). This has impact on the semantics of register files, 28 | which cannot be accessed out of bounds. Otherwise we have the tricky 29 | situation that try (check false; x <- \bot) is different from x <- 30 | \bot; try (check false). 31 | 32 | - Discussion about the coq workshop proposal. 33 | 34 | 05/16/2012 Discussion with Adam 35 | Discussion about the translation and about a potential paper. My 36 | translation issues should be resolved by keeping PHOAS, and using a 37 | proof similar to the one in ltamer/examples/untyped/CC.v 38 | 39 | Paper 40 | Section 1. Language. 41 | - Core + Match + Sigma -> Core -> RTL 42 | - Proofs of the previous 43 | Section 2. Examples 44 | - Mod, Isa, Pipelined (MIPS ?) 45 | Section 3. Free stuff 46 | - Scheduler 47 | - Type system to prevent some bad stuff to happen 48 | - Hoare/VCG 49 | - Meta-level definition 50 | - Compliance to a protocol / refinement 51 | Section 4. Ripe Lava. 52 | 53 | Question to ask to Arvind: to what kind of conference should we 54 | submit this. 55 | 56 | Shown the example of the coffe machines 57 | 58 | 59 | 05/10/2012 Discussion with Richard. 60 | - GCD -> MOD. 61 | - Turns out that to avoid having to use the scheduler, one may just 62 | use "a orElse b" composition of actions, and "a ; b", and use wires to 63 | implement sequential composition... 64 | 65 | 66 | 05/07/2012 67 | Provided core GAA with a formal 'monadic' semantics, with a mixture of 68 | PHOAS, and dependent de Bruijn indices. 69 | 70 | 05/02/2012 71 | 72 | The user has to specify a schedule between the rules. A scheduler 73 | cannot make a fair schedule between two rules that both apply. Or a 74 | round robin ? 75 | 76 | 04/19/2012 Meeting 77 | 78 | - Investigate the use of PHOAS for the definition of the embedding of TRS. 79 | - Investigate the chapter of CPDT called Generic programming to 80 | discover if Coq inductives could be used instead of the deep-embedding 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /papers/.gitignore: -------------------------------------------------------------------------------- 1 | cav-13/auto/ 2 | cav-13/main.aux 3 | cav-13/main.bbl 4 | cav-13/main.blg 5 | cav-13/main.dvi 6 | cav-13/main.log 7 | cav-13/main.pdf 8 | -------------------------------------------------------------------------------- /papers/cav-13/lstcoq.sty: -------------------------------------------------------------------------------- 1 | %======================================================================= 2 | % Définit le style ssr Gallina pour les listings (Assia Mahboubi 2007) 3 | \lstdefinelanguage{Coq}{ 4 | % 5 | % Anything betweeen $ becomes LaTeX math mode 6 | mathescape=true, 7 | % 8 | % Comments may or not include Latex commands 9 | texcl=false, 10 | % 11 | % 12 | % Vernacular commands 13 | morekeywords=[1]{ 14 | Section, Module, End, Require, Import, Export, 15 | Variable, Variables, Parameter, Parameters, Axiom, Hypothesis, Hypotheses, 16 | Notation, Local, Tactic, Reserved, Scope, Open, Close, Delimit, 17 | Definition, Let, Ltac, Fixpoint, CoFixpoint, Add, Morphism, Relation, 18 | Implicit, Arguments, Set, Unset, Contextual, Strict, Prenex, Implicits, 19 | Inductive, CoInductive, Record, Structure, Canonical, Coercion, 20 | Context, Class, Global, Instance, Program, Infix, 21 | Theorem, Lemma, Corollary, Proposition, Fact, Remark, Example, 22 | Proof, Goal, Save, Qed, Defined, Hint, Resolve, Rewrite, View, 23 | Search, Show, Print, Printing, All, Graph, Projections, inside, outside}, 24 | % 25 | % Gallina 26 | morekeywords=[2]{forall, exists, exists2, fun, fix, cofix, struct, 27 | match, with, end, as, in, return, let, if, is, then, else, 28 | for, of, nosimpl, when}, 29 | % 30 | % Sorts 31 | morekeywords=[3]{Type, Prop, Set}, 32 | % 33 | % Various tactics, some are std Coq subsumed by ssr, for the manual purpose 34 | morekeywords=[4]{ 35 | pose, set, move, case, elim, apply, clear, 36 | hnf, intro, intros, generalize, rename, pattern, after, 37 | destruct, induction, using, refine, inversion, injection, 38 | rewrite, congr, unlock, compute, ring, field, fourier, 39 | replace, fold, unfold, change, cutrewrite, simpl, 40 | have, suff, wlog, suffices, without, loss, nat_norm, 41 | cut, trivial, revert, bool_congr, nat_congr, 42 | symmetry, transitivity, auto, split, autorewrite}, 43 | % symmetry, transitivity, auto, split, left, right, autorewrite}, 44 | % 45 | % Terminators 46 | morekeywords=[5]{ 47 | by, done, exact, reflexivity, tauto, romega, omega, 48 | assumption, solve, contradiction, discriminate}, 49 | % 50 | % Control 51 | morekeywords=[6]{do, last, first, try, idtac, repeat}, 52 | % 53 | % Various symbols 54 | % For the ssr manual we turn off the prettyprint of formulas 55 | % literate= 56 | % {->}{{$\rightarrow\,$}}2 57 | % {->}{{\tt ->}}3 58 | % {<-}{{$\leftarrow\,$}}2 59 | % {<-}{{\tt <-}}2 60 | % {>->}{{$\mapsto$}}3 61 | % {<=}{{$\leq$}}1 62 | % {>=}{{$\geq$}}1 63 | % {<>}{{$\neq$}}1 64 | % {/\\}{{$\wedge$}}2 65 | % {\\/}{{$\vee$}}2 66 | % {<->}{{$\leftrightarrow\;$}}3 67 | % {<=>}{{$\Leftrightarrow\;$}}3 68 | % {:nat}{{$~\in\mathbb{N}$}}3 69 | % {fforall\ }{{$\forall_f\,$}}1 70 | % {forall\ }{{$\forall\,$}}1 71 | % {exists\ }{{$\exists\,$}}1 72 | % {negb}{{$\neg$}}1 73 | % {spp}{{:*:\,}}1 74 | % {~}{{$\sim$}}1 75 | % {\\in}{{$\in\;$}}1 76 | % {/\\}{$\land\,$}1 77 | % {:*:}{{$*$}}2 78 | % {=>}{{$\,\Rightarrow\ $}}1 79 | % {=>}{{\tt =>}}2 80 | % {:=}{{{\tt:=}\,\,}}2 81 | % {==}{{$\equiv$}\,}2 82 | % {!=}{{$\neq$}\,}2 83 | % {^-1}{{$^{-1}$}}1 84 | % {elt'}{elt'}1 85 | % {=}{{\tt=}\,\,}2 86 | % {+}{{\tt+}\,\,}2, 87 | % 88 | % Comments delimiters, we do turn this off for the manual 89 | morecomment=[s]{(*}{*)}, 90 | % 91 | % Spaces are not displayed as a special character 92 | showstringspaces=false, 93 | % 94 | % String delimiters 95 | morestring=[b]", 96 | morestring=[d]’, 97 | % 98 | % Size of tabulations 99 | tabsize=3, 100 | % 101 | % Enables ASCII chars 128 to 255 102 | extendedchars=false, 103 | % 104 | % Case sensitivity 105 | sensitive=true, 106 | % 107 | % Automatic breaking of long lines 108 | breaklines=true, 109 | % 110 | % Default style fors listings 111 | basicstyle=\scriptsize, 112 | % 113 | % Position of captions is bottom 114 | captionpos=b, 115 | % 116 | % Full flexible columns 117 | columns=[l]flexible, 118 | keepspaces=true, 119 | % 120 | % Style for (listings') identifiers 121 | identifierstyle={\ttfamily\color{black}}, 122 | % Note : highlighting of Coq identifiers is done through a new 123 | % delimiter definition through an lstset at the begining of the 124 | % document. Don't know how to do better. 125 | % 126 | % Style for declaration keywords 127 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 128 | % Style for gallina keywords 129 | keywordstyle=[2]{\ttfamily\color{dkgreen}}, 130 | % Style for sorts keywords 131 | keywordstyle=[3]{\ttfamily\color{dkblue}}, 132 | % Style for tactics keywords 133 | keywordstyle=[4]{\ttfamily\color{dkblue}}, 134 | % Style for terminators keywords 135 | keywordstyle=[5]{\ttfamily\color{dkred}}, 136 | %Style for iterators 137 | %keywordstyle=[6]{\ttfamily\color{dkpink}}, 138 | % Style for strings 139 | stringstyle=\ttfamily, 140 | % Style for comments 141 | commentstyle={\ttfamily\color{dkgreen}}, 142 | % 143 | % 144 | moredelim=**[is][\ttfamily\color{red}]{/&}{&/}, 145 | %litterate 146 | literate= 147 | {\\equiv}{{$\leftrightarrow\,$}}3 148 | {\\/}{{$\vee$}}1 149 | {/\\}{{$\wedge$}}1 150 | {==>}{{$\Rightarrow$}}1 151 | {=>}{{$\Rightarrow$}}1 152 | {>->}{{$\rightarrowtail$}}2 153 | {->}{{$\rightarrow\,$}}2 154 | {<-}{{$\leftarrow\,$}}2 155 | {++}{{$\cup$}}1 156 | {<==}{{$\subseteq$}}1 157 | {|-}{{\quad$\vdash$\quad}}1 158 | {forall}{{$\forall$}}1 159 | {exists}{{$\exists$}}1 160 | {=o=}{{$\circeq$}}1 161 | {\\fun}{{$\lambda$}}1 162 | {|>}{{$\rhd$}}1 163 | {\\oplus}{{$\oplus$}}1 164 | {\\tab}{{\quad}}1 165 | {\\_}{{ }}1 166 | {||}{{$\vee$}}1 167 | {\&\&}{{$\wedge$}}1 168 | {\\bool}{{$\mathbb{B}$}}1 169 | {\\data}{{$\mathbb{T}$}}1 170 | {\\times}{{$\times$}}1 171 | {\\xorb}{{$\oplus$}}1 172 | {\\andb}{{$\wedge$}}1 173 | }[keywords,strings] 174 | 175 | \lstnewenvironment{coq}{\lstset{language=Coq}}{} 176 | %\lstnewenvironment{mcoq}{\lstset{language=Coq,xleftmargin=3pt}}{} 177 | \lstnewenvironment{mcoq}{\lstset{language=Coq}}{} 178 | % pour inliner dans le texte 179 | \def\coqe{\lstinline[language=Coq, basicstyle=\normalsize]} 180 | -------------------------------------------------------------------------------- /papers/cav-13/lsthaskell.sty: -------------------------------------------------------------------------------- 1 | % lstlisting Haskell style (inspired from a file of Assia Mahboubi) 2 | % 3 | \lstdefinelanguage{Haskell}{ 4 | % 5 | % Anything betweeen $ becomes LaTeX math mode 6 | mathescape=true, 7 | % 8 | % Comments may or not include Latex commands 9 | texcl=false, 10 | % 11 | morekeywords=[1]{class, instance}, 12 | % 13 | morekeywords=[2]{where}, 14 | % 15 | morekeywords=[3]{Maybe}, 16 | % 17 | morekeywords=[4]{main}, 18 | % 19 | morekeywords=[6]{do, last, first, try, idtac, repeat}, 20 | % 21 | % Comments delimiters, we do turn this off for the manual 22 | morecomment=[s]{(*}{*)}, 23 | % 24 | % Spaces are not displayed as a special character 25 | showstringspaces=false, 26 | % 27 | % String delimiters 28 | morestring=[b]", 29 | morestring=[d]’, 30 | % 31 | % Size of tabulations 32 | tabsize=3, 33 | % 34 | % Enables ASCII chars 128 to 255 35 | extendedchars=false, 36 | % 37 | % Case sensitivity 38 | sensitive=true, 39 | % 40 | % Automatic breaking of long lines 41 | breaklines=false, 42 | % 43 | % Default style fors listings 44 | basicstyle=\small, 45 | % 46 | % Position of captions is bottom 47 | captionpos=b, 48 | % 49 | % flexible columns 50 | columns=[l]flexible, 51 | % 52 | % Style for (listings') identifiers 53 | identifierstyle={\ttfamily\color{black}}, 54 | % Style for declaration keywords 55 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 56 | % Style for gallina keywords 57 | keywordstyle=[2]{\ttfamily\color{dkgreen}}, 58 | % Style for sorts keywords 59 | keywordstyle=[3]{\ttfamily\color{ltblue}}, 60 | % Style for tactics keywords 61 | keywordstyle=[4]{\ttfamily\color{dkblue}}, 62 | % Style for terminators keywords 63 | keywordstyle=[5]{\ttfamily\color{dkred}}, 64 | %Style for iterators 65 | %keywordstyle=[6]{\ttfamily\color{dkpink}}, 66 | % Style for strings 67 | stringstyle=\ttfamily, 68 | % Style for comments 69 | commentstyle={\ttfamily\color{dkgreen}}, 70 | % 71 | %moredelim=**[is][\ttfamily\color{red}]{/&}{&/}, 72 | literate= 73 | {->}{{$\rightarrow\;$}}1 74 | {=>}{{$\Rightarrow\;$}}1 75 | {++}{{\code{++}}}1 76 | {~}{{\ }}1 77 | {\\dollar}{{$\$$\;}}1 78 | % 79 | }[keywords,comments,strings] 80 | 81 | \lstnewenvironment{haskell}{\lstset{language=Haskell}}{} 82 | 83 | % pour inliner dans le texte 84 | \def\hasqel{\lstinline[language=Haskell, basicstyle=\small]} 85 | % pour inliner dans les tableaux / displaymath... 86 | \def\haskels{\lstinline[language=Haskell, basicstyle=\scriptsize]} 87 | 88 | %%% Local Variables: 89 | %%% mode: latex 90 | %%% Local IspellDict: british 91 | %%% TeX-master: "main.tex" 92 | %%% End: 93 | -------------------------------------------------------------------------------- /papers/cav-13/lstocaml.sty: -------------------------------------------------------------------------------- 1 | \lstdefinelanguage{OCaml}{ 2 | % Anything betweeen $ becomes LaTeX math mode 3 | mathescape=true, 4 | % 5 | % Comments may or not include Latex commands 6 | texcl=false, 7 | % 8 | % Vernacular commands 9 | morekeywords=[1]{and, as, assert, begin, class, constraint, do, done, downto, else, end, exception, external, false, for, fun, function, functor, if, in, include, inherit, initializer, lazy, let, match, method, module, mutable, new, object, of, open, or, private, rec, sig, struct, then, to, true, try, type, val, virtual, when, while, with}, 10 | % 11 | % 12 | % Comments delimiters, we do turn this off for the manual 13 | comment=[s]{(*}{*)}, 14 | % 15 | %keepspaces 16 | keepspaces=true, 17 | % Spaces are not displayed as a special character 18 | showstringspaces=false, 19 | % 20 | % String delimiters 21 | morestring=[b]", 22 | morestring=[d]’, 23 | % 24 | % Size of tabulations 25 | tabsize=3, 26 | % 27 | % Enables ASCII chars 128 to 255 28 | extendedchars=false, 29 | % 30 | % Case sensitivity 31 | sensitive=true, 32 | % 33 | % Automatic breaking of long lines 34 | breaklines=true, 35 | % 36 | % Default style fors listings 37 | basicstyle=\small, 38 | % 39 | % Position of captions is bottom 40 | captionpos=b, 41 | % 42 | % Full flexible columns 43 | columns=[l]fullflexible, 44 | % 45 | % Style for (listings') identifiers 46 | identifierstyle={\ttfamily\color{black}}, 47 | % Note : highlighting of Coq identifiers is done through a new 48 | % delimiter definition through an lstset at the begining of the 49 | % document. Don't know how to do better. 50 | % 51 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 52 | % Style for strings 53 | stringstyle=\ttfamily, 54 | % Style for comments 55 | commentstyle={\ttfamily\color{dkgreen}}, 56 | % 57 | %litterate 58 | literate= 59 | {->}{{$\to$\,}}2 60 | % {[blank]}{{\mbox{~}}}1 61 | {'a}{{$\alpha$}}1 62 | {'b}{{$\beta$}}1 63 | {>>}{{$\gg$}}1 64 | {>>|}{{$\gg\mid$}}1 65 | {\\eqac}{{$\equiv_{AC}$}}1 66 | {->}{{$\rightarrow$}}1 67 | {|triangle}{{$\triangle$}}1 68 | {|kreuz_1}{{$\kreuz_1$}}1 69 | {|kreuz_2}{{$\kreuz_2$}}1 70 | {|kreuz_3}{{$\kreuz_3$}}1 71 | {sigma}{{$\sigma$}}1 72 | {p_1}{{$p_1$}}1 73 | {p_2}{{$p_2$}}1 74 | {t_1}{{$t_1$}}1 75 | {t_2}{{$t_2$}}1 76 | {p_i}{{$p_i$}}1 77 | {t_i}{{$t_i$}}1 78 | {\\tab}{{$\qquad$}}1 79 | {[blank]}{{\ }}1 80 | % 81 | }[keywords,comments,strings] 82 | 83 | 84 | \lstnewenvironment{ocaml}{\lstset{language=OCaml}}{} 85 | % pour inliner dans le texte 86 | \def\ocamles{\lstinline[language=OCaml, basicstyle=\small]} 87 | % pour inliner dans les tableaux / displaymath... 88 | \def\ocamle{\lstinline[language=OCaml, basicstyle=\normalsize]} 89 | -------------------------------------------------------------------------------- /papers/cav-13/macros.sty: -------------------------------------------------------------------------------- 1 | \usepackage[utf8]{inputenc} 2 | \usepackage[english]{babel} 3 | \usepackage{amsmath} 4 | \usepackage{amssymb} 5 | 6 | \newcommand{\secref}[1]{\S\ref{#1}} 7 | \usepackage{color} 8 | % hyperlinks 9 | \definecolor{citecolor}{rgb}{0.0,0.4,0.0} 10 | \definecolor{urlcolor}{rgb}{0.0,0.0,0.4} 11 | \definecolor{linkcolor}{rgb}{0.0,0.0,0.4} 12 | \usepackage[bookmarks=false,breaklinks=true,colorlinks,linkcolor=linkcolor,urlcolor=urlcolor,citecolor=citecolor]{hyperref} 13 | 14 | % listings 15 | \definecolor{ltblue}{rgb}{0,0.4,0.4} 16 | \definecolor{dkblue}{rgb}{0,0.1,0.6} 17 | \definecolor{dkgreen}{rgb}{0,0.4,0} 18 | \definecolor{dkviolet}{rgb}{0.3,0,0.5} 19 | \definecolor{dkred}{rgb}{0.5,0,0} 20 | \usepackage{listings} 21 | 22 | % two listings side by side 23 | \newenvironment{twolistings}% 24 | {\par\noindent\begin{tabular*}{\linewidth}{@{}c@{\extracolsep{\fill}}c@{}}}% 25 | {\end{tabular*}\smallskip\par} 26 | \newenvironment{threelistings}% 27 | {\par\noindent\begin{tabular*}{\linewidth}{@{}c@{\extracolsep{\fill}}c@{\extracolsep{\fill}}c@{}}}% 28 | {\end{tabular*}\smallskip\par} 29 | 30 | % misc 31 | \newcommand{\eqdef}{\triangleq} 32 | 33 | 34 | % désactivé pour la soummission 35 | % \newcommand\red[1]{{\color{red}{#1}}} 36 | 37 | % divers 38 | \newcommand \tuple[1]{\langle{#1}\rangle} 39 | \newcommand \set[1]{\left\{#1 \right\}} 40 | \newcommand \paren[1]{\left({#1}\right)} 41 | \newcommand \card[1] {|#1|} 42 | 43 | \newcommand \thomas[1]{\marginpar{\textbf{tb:}#1}} 44 | \newcommand \adam[1]{\marginpar{\textbf{ac:}#1}} 45 | 46 | -------------------------------------------------------------------------------- /papers/cav-13/main-blx.bib: -------------------------------------------------------------------------------- 1 | @Comment{$ biblatex control file $} 2 | @Comment{$ biblatex version 1.5 $} 3 | Do not modify this file! 4 | 5 | This is an auxiliary file used by the 'biblatex' package. 6 | This file may safely be deleted. It will be recreated as 7 | required. 8 | 9 | @Control{biblatex-control, 10 | options = {1.5:0:0:1:0:0:1:1:0:0:0:0:1:1:6:1:79:+}, 11 | } 12 | -------------------------------------------------------------------------------- /papers/cav-13/mathpartir.sty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/papers/cav-13/mathpartir.sty -------------------------------------------------------------------------------- /papers/coq-workshop-12/lstcoq.sty: -------------------------------------------------------------------------------- 1 | %======================================================================= 2 | % Définit le style ssr Gallina pour les listings (Assia Mahboubi 2007) 3 | \lstdefinelanguage{Coq}{ 4 | % 5 | % Anything betweeen $ becomes LaTeX math mode 6 | mathescape=true, 7 | % 8 | % Comments may or not include Latex commands 9 | texcl=false, 10 | % 11 | % 12 | % Vernacular commands 13 | morekeywords=[1]{ 14 | Section, Module, End, Require, Import, Export, 15 | Variable, Variables, Parameter, Parameters, Axiom, Hypothesis, Hypotheses, 16 | Notation, Local, Tactic, Reserved, Scope, Open, Close, Bind, Delimit, 17 | Definition, Let, Ltac, Fixpoint, CoFixpoint, Add, Morphism, Relation, 18 | Implicit, Arguments, Set, Unset, Contextual, Strict, Prenex, Implicits, 19 | Inductive, CoInductive, Record, Structure, Canonical, Coercion, 20 | Context, Class, Global, Instance, Program, Infix, 21 | Theorem, Lemma, Corollary, Proposition, Fact, Remark, Example, 22 | Proof, Goal, Save, Qed, Defined, Hint, Resolve, Rewrite, View, 23 | Search, Show, Print, Printing, All, Graph, Projections, inside, outside}, 24 | % 25 | % Gallina 26 | morekeywords=[2]{forall, exists, exists2, fun, fix, cofix, struct, 27 | match, with, end, as, in, return, let, if, is, then, else, 28 | for, of, nosimpl, when}, 29 | % 30 | % Sorts 31 | morekeywords=[3]{Type, Prop, Set}, 32 | % 33 | % Various tactics, some are std Coq subsumed by ssr, for the manual purpose 34 | morekeywords=[4]{ 35 | pose, set, move, case, elim, apply, clear, 36 | hnf, intro, intros, generalize, rename, pattern, after, 37 | destruct, induction, using, refine, inversion, injection, 38 | rewrite, congr, unlock, compute, ring, field, fourier, 39 | replace, fold, unfold, change, cutrewrite, simpl, 40 | have, suff, wlog, suffices, without, loss, nat_norm, 41 | assert, cut, trivial, revert, bool_congr, nat_congr, 42 | symmetry, transitivity, auto, split, autorewrite}, 43 | % symmetry, transitivity, auto, split, left, right, autorewrite}, 44 | % 45 | % Terminators 46 | morekeywords=[5]{ 47 | by, done, exact, reflexivity, tauto, romega, omega, 48 | assumption, solve, contradiction, discriminate}, 49 | % 50 | % Control 51 | morekeywords=[6]{do, last, first, try, idtac, repeat}, 52 | % 53 | % Various symbols 54 | % For the ssr manual we turn off the prettyprint of formulas 55 | % literate= 56 | % {->}{{$\rightarrow\,$}}2 57 | % {->}{{\tt ->}}3 58 | % {<-}{{$\leftarrow\,$}}2 59 | % {<-}{{\tt <-}}2 60 | % {>->}{{$\mapsto$}}3 61 | % {<=}{{$\leq$}}1 62 | % {>=}{{$\geq$}}1 63 | % {<>}{{$\neq$}}1 64 | % {/\\}{{$\wedge$}}2 65 | % {\\/}{{$\vee$}}2 66 | % {<->}{{$\leftrightarrow\;$}}3 67 | % {<=>}{{$\Leftrightarrow\;$}}3 68 | % {:nat}{{$~\in\mathbb{N}$}}3 69 | % {fforall\ }{{$\forall_f\,$}}1 70 | % {forall\ }{{$\forall\,$}}1 71 | % {exists\ }{{$\exists\,$}}1 72 | % {negb}{{$\neg$}}1 73 | % {spp}{{:*:\,}}1 74 | % {~}{{$\sim$}}1 75 | % {\\in}{{$\in\;$}}1 76 | % {/\\}{$\land\,$}1 77 | % {:*:}{{$*$}}2 78 | % {=>}{{$\,\Rightarrow\ $}}1 79 | % {=>}{{\tt =>}}2 80 | % {:=}{{{\tt:=}\,\,}}2 81 | % {==}{{$\equiv$}\,}2 82 | % {!=}{{$\neq$}\,}2 83 | % {^-1}{{$^{-1}$}}1 84 | % {elt'}{elt'}1 85 | % {=}{{\tt=}\,\,}2 86 | % {+}{{\tt+}\,\,}2, 87 | % 88 | % Comments delimiters, we do turn this off for the manual 89 | morecomment=[s]{(*}{*)}, 90 | % 91 | % Spaces are not displayed as a special character 92 | showstringspaces=false, 93 | % 94 | % String delimiters 95 | morestring=[b]", 96 | morestring=[d]’, 97 | % 98 | % Size of tabulations 99 | tabsize=3, 100 | % 101 | % Enables ASCII chars 128 to 255 102 | extendedchars=false, 103 | % 104 | % Case sensitivity 105 | sensitive=true, 106 | % 107 | % Automatic breaking of long lines 108 | breaklines=true, 109 | % 110 | % Default style fors listings 111 | basicstyle=\small, 112 | % 113 | % Position of captions is bottom 114 | captionpos=b, 115 | % 116 | % Full flexible columns 117 | columns=[l]flexible, 118 | keepspaces=true, 119 | % 120 | % Style for (listings') identifiers 121 | identifierstyle={\ttfamily\color{black}}, 122 | % Note : highlighting of Coq identifiers is done through a new 123 | % delimiter definition through an lstset at the begining of the 124 | % document. Don't know how to do better. 125 | % 126 | % Style for declaration keywords 127 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 128 | % Style for gallina keywords 129 | keywordstyle=[2]{\ttfamily\color{dkgreen}}, 130 | % Style for sorts keywords 131 | keywordstyle=[3]{\ttfamily\color{ltblue}}, 132 | % Style for tactics keywords 133 | keywordstyle=[4]{\ttfamily\color{dkblue}}, 134 | % Style for terminators keywords 135 | keywordstyle=[5]{\ttfamily\color{dkred}}, 136 | %Style for iterators 137 | %keywordstyle=[6]{\ttfamily\color{dkpink}}, 138 | % Style for strings 139 | stringstyle=\ttfamily, 140 | % Style for comments 141 | commentstyle={\ttfamily\color{dkgreen}}, 142 | % 143 | % 144 | moredelim=**[is][\ttfamily\color{red}]{/&}{&/}, 145 | %litterate 146 | literate= 147 | {\\equiv}{{$\leftrightarrow\,$}}3 148 | {\\/}{{$\vee$}}1 149 | {/\\}{{$\wedge$}}1 150 | {==>}{{$\Rightarrow$}}1 151 | {=>}{{$\Rightarrow$}}1 152 | {>->}{{$\rightarrowtail$}}2 153 | {->}{{$\rightarrow\,$}}2 154 | {<-}{{$\leftarrow\,$}}2 155 | {++}{{$\cup$}}1 156 | {<==}{{$\subseteq$}}1 157 | {|-}{{\quad$\vdash$\quad}}1 158 | {forall}{{$\forall$}}1 159 | {exists}{{$\exists$}}1 160 | {=o=}{{$\circeq$}}1 161 | {\\fun}{{$\lambda$}}1 162 | {|>}{{$\rhd$}}1 163 | {\\oplus}{{$\oplus$}}1 164 | {\\tab}{{\quad}}1 165 | {\\_}{{ }}1 166 | {||}{{$\vee$}}1 167 | {\&\&}{{$\wedge$}}1 168 | {\\bool}{{$\mathbb{B}$}}1 169 | {\\data}{{$\mathbb{T}$}}1 170 | {\\times}{{$\times$}}1 171 | {\\xorb}{{$\oplus$}}1 172 | {\\andb}{{$\wedge$}}1 173 | }[keywords,strings] 174 | \lstdefinestyle{ka}{ 175 | language=Coq, 176 | literate= 177 | {=>}{{$\Rightarrow$}}1 178 | {\\tab}{{\quad}}1 179 | {@}{{$\cdot$}}1 180 | {\\@}{{@}}1 181 | {<->}{\,{$\leftrightarrow$\,}}2 182 | {>->}{{$\rightarrowtail$}}2 183 | {->}{{$\to$}}1 184 | {-->}{{$\to$}}2 185 | {\\in}{{$\in$}}1 186 | {++}{{$\cup$}}1 187 | {\\times}{{$\times$}}1 188 | {\\To}{{$\Rightarrow$}}1 189 | {<==}{{$\subseteq$}}1 190 | {\#}{{$^\star$}}1 191 | {\/\\}{{$\wedge$}}1 192 | {|-}{{$\vdash$}}1 193 | {\\\/}{{$\vee$}}1 194 | {~}{{\mbox{}}}1 195 | {~~}{{$\approx$}}1 196 | {forall}{{$\forall$}}1 197 | {forall-}{{$\forall$}}1 198 | {exists}{{$\exists$}}1 199 | {exists-}{{$\exists$}}1 200 | {[blank]}{{\mbox{}}}1 201 | {==}{{$\equiv$}}1 202 | {\\o}{{$\circ$}}1 203 | } 204 | \lstdefinestyle{aac}{ 205 | language=Coq, 206 | literate= 207 | {==>}{{$\Rightarrow$}}1 208 | {=>}{{$\Rightarrow$}}1 209 | {>->}{{$\rightarrowtail$}}2 210 | {->}{{$\rightarrow\,$}}2 211 | {<-}{{$\leftarrow\,$}}2 212 | {<==}{{$\subseteq$}}1 213 | {\/\\}{{$\wedge$}}1 214 | {|-}{{$\vdash$}}1 215 | {\\\/}{{$\vee$}}1 216 | {\\tab}{{$\quad$}}1 217 | {\\ttab}{{$\qquad$}}1 218 | {~}{{\ }}1 219 | {`}{{\;}}1 220 | {\\cup}{{$\cup$}}1 221 | {\\cap}{{$\cap$}}1 222 | {\\emptyset}{{$\emptyset$}}1 223 | {sigma}{{$\sigma$}}1 224 | {Gamma}{{$\Gamma$} }1 225 | {forall}{{$\forall$}}1 226 | {exists}{{$\exists$}}1 227 | {^2}{{$^2$}}1 228 | {<|}{{$\,\lhd\quad$}}3 229 | {[|}{{$\llbracket$}}1 230 | {|]}{{$\rrbracket$}}1 231 | {\{|}{{$\llparenthesis$\ }}1 232 | {|\}}{{\ $\rrparenthesis$}}1 233 | % {[|}{{[|}}1 234 | % {|]}{{|]}}1 235 | {\\fun}{{$\lambda$}}1 236 | } 237 | 238 | \lstnewenvironment{coq}{\lstset{language=Coq}}{} 239 | \lstnewenvironment{scoq}{\lstset{language=Coq,basicstyle=\scriptsize}}{} 240 | \lstnewenvironment{coqka}{\lstset{language=Coq,style=ka}}{} 241 | \lstnewenvironment{coqaac}{\lstset{language=Coq,style=aac}}{} 242 | % pour inliner dans le texte 243 | \def\coqe{\lstinline[language=Coq, basicstyle=\normalsize]} 244 | \def\coqeka{\lstinline[language=Coq,style=ka, basicstyle=\normalsize]} 245 | \def\coqeaac{\lstinline[language=Coq,style=aac, basicstyle=\normalsize]} 246 | -------------------------------------------------------------------------------- /papers/coq-workshop-12/lstcoq_circuits.sty: -------------------------------------------------------------------------------- 1 | %======================================================================= 2 | % Définit le style ssr Gallina pour les listings (Assia Mahboubi 2007) 3 | \lstdefinelanguage{Coq}{ 4 | % 5 | % Anything betweeen $ becomes LaTeX math mode 6 | mathescape=true, 7 | % 8 | % Comments may or not include Latex commands 9 | texcl=false, 10 | % 11 | % 12 | % Vernacular commands 13 | morekeywords=[1]{ 14 | Section, Module, End, Require, Import, Export, 15 | Variable, Variables, Parameter, Parameters, Axiom, Hypothesis, Hypotheses, 16 | Notation, Local, Tactic, Reserved, Scope, Open, Close, Bind, Delimit, 17 | Definition, Let, Ltac, Fixpoint, CoFixpoint, Add, Morphism, Relation, 18 | Implicit, Arguments, Set, Unset, Contextual, Strict, Prenex, Implicits, 19 | Inductive, CoInductive, Record, Structure, Canonical, Coercion, 20 | Context, Class, Global, Instance, Program, Infix, 21 | Theorem, Lemma, Corollary, Proposition, Fact, Remark, Example, 22 | Proof, Goal, Save, Qed, Defined, Hint, Resolve, Rewrite, View, 23 | Search, Show, Print, Printing, All, Graph, Projections, inside, outside}, 24 | % 25 | % Gallina 26 | morekeywords=[2]{forall, exists, exists2, fun, fix, cofix, struct, 27 | match, with, end, as, in, return, let, if, is, then, else, 28 | for, of, nosimpl, when}, 29 | % 30 | % Sorts 31 | morekeywords=[3]{Type, Prop, Set}, 32 | % 33 | % Various tactics, some are std Coq subsumed by ssr, for the manual purpose 34 | morekeywords=[4]{ 35 | pose, set, move, case, elim, apply, clear, 36 | hnf, intro, intros, generalize, rename, pattern, after, 37 | destruct, induction, using, refine, inversion, injection, 38 | rewrite, congr, unlock, compute, ring, field, fourier, 39 | replace, fold, unfold, change, cutrewrite, simpl, 40 | have, suff, wlog, suffices, without, loss, nat_norm, 41 | assert, cut, trivial, revert, bool_congr, nat_congr, 42 | symmetry, transitivity, auto, split, autorewrite}, 43 | % symmetry, transitivity, auto, split, left, right, autorewrite}, 44 | % 45 | % Terminators 46 | morekeywords=[5]{ 47 | by, done, exact, reflexivity, tauto, romega, omega, 48 | assumption, solve, contradiction, discriminate}, 49 | % 50 | % Control 51 | morekeywords=[6]{do, last, first, try, idtac, repeat}, 52 | % 53 | % Various symbols 54 | % For the ssr manual we turn off the prettyprint of formulas 55 | % literate= 56 | % {->}{{$\rightarrow\,$}}2 57 | % {->}{{\tt ->}}3 58 | % {<-}{{$\leftarrow\,$}}2 59 | % {<-}{{\tt <-}}2 60 | % {>->}{{$\mapsto$}}3 61 | % {<=}{{$\leq$}}1 62 | % {>=}{{$\geq$}}1 63 | % {<>}{{$\neq$}}1 64 | % {/\\}{{$\wedge$}}2 65 | % {\\/}{{$\vee$}}2 66 | % {<->}{{$\leftrightarrow\;$}}3 67 | % {<=>}{{$\Leftrightarrow\;$}}3 68 | % {:nat}{{$~\in\mathbb{N}$}}3 69 | % {fforall\ }{{$\forall_f\,$}}1 70 | % {forall\ }{{$\forall\,$}}1 71 | % {exists\ }{{$\exists\,$}}1 72 | % {negb}{{$\neg$}}1 73 | % {spp}{{:*:\,}}1 74 | % {~}{{$\sim$}}1 75 | % {\\in}{{$\in\;$}}1 76 | % {/\\}{$\land\,$}1 77 | % {:*:}{{$*$}}2 78 | % {=>}{{$\,\Rightarrow\ $}}1 79 | % {=>}{{\tt =>}}2 80 | % {:=}{{{\tt:=}\,\,}}2 81 | % {==}{{$\equiv$}\,}2 82 | % {!=}{{$\neq$}\,}2 83 | % {^-1}{{$^{-1}$}}1 84 | % {elt'}{elt'}1 85 | % {=}{{\tt=}\,\,}2 86 | % {+}{{\tt+}\,\,}2, 87 | % 88 | % Comments delimiters, we do turn this off for the manual 89 | morecomment=[s]{(**}{**)}, 90 | % 91 | % Spaces are not displayed as a special character 92 | showstringspaces=false, 93 | % 94 | % String delimiters 95 | morestring=[b]", 96 | morestring=[d]’, 97 | % 98 | % Size of tabulations 99 | tabsize=3, 100 | % 101 | % Enables ASCII chars 128 to 255 102 | extendedchars=false, 103 | % 104 | % Case sensitivity 105 | sensitive=true, 106 | % 107 | % Automatic breaking of long lines 108 | breaklines=true, 109 | % 110 | % Default style fors listings 111 | basicstyle=\small, 112 | % 113 | % Position of captions is bottom 114 | captionpos=b, 115 | % 116 | % Full flexible columns 117 | columns=[l]fullflexible, 118 | keepspaces=true, 119 | % 120 | % Style for (listings') identifiers 121 | identifierstyle={\ttfamily\color{black}}, 122 | % Note : highlighting of Coq identifiers is done through a new 123 | % delimiter definition through an lstset at the begining of the 124 | % document. Don't know how to do better. 125 | % 126 | % Style for declaration keywords 127 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 128 | % Style for gallina keywords 129 | keywordstyle=[2]{\ttfamily\color{dkgreen}}, 130 | % Style for sorts keywords 131 | keywordstyle=[3]{\ttfamily\color{ltblue}}, 132 | % Style for tactics keywords 133 | keywordstyle=[4]{\ttfamily\color{dkblue}}, 134 | % Style for terminators keywords 135 | keywordstyle=[5]{\ttfamily\color{dkred}}, 136 | %Style for iterators 137 | %keywordstyle=[6]{\ttfamily\color{dkpink}}, 138 | % Style for strings 139 | stringstyle=\ttfamily, 140 | % Style for comments 141 | commentstyle={\ttfamily\color{dkgreen}}, 142 | % 143 | % 144 | moredelim=**[is][\ttfamily\color{red}]{/&}{&/}, 145 | %litterate 146 | literate= 147 | {\\equiv}{{$\leftrightarrow\,$}}3 148 | {==>}{{$\Rightarrow$}}1 149 | {=>}{{$\Rightarrow$}}1 150 | {>->}{{$\rightarrowtail$}}2 151 | {->}{{$\rightarrow\,$}}2 152 | {<-}{{$\leftarrow\,$}}2 153 | {++}{{$\cup$}}1 154 | {<==}{{$\subseteq$}}1 155 | {|-}{{\quad$\vdash$\quad}}1 156 | {forall}{{$\forall$}}1 157 | {exists}{{$\exists$}}1 158 | {=o=}{{$\circeq$}}1 159 | {\\fun}{{$\lambda$}}1 160 | {|>}{{$\rhd$}}1 161 | {\\oplus}{{$\oplus$}}1 162 | {\\tab}{{\quad}}1 163 | {\\_}{{ }}1 164 | {||}{{$\vee$}}1 165 | {\&\&}{{$\wedge$}}1 166 | {\\bool}{{$\mathbb{B}$}}1 167 | {\\data}{{$\mathbb{T}$}}1 168 | {\\times}{{$\times$}}1 169 | {\\xorb}{{$\oplus$}}1 170 | {\\andb}{{$\wedge$}}1 171 | % 172 | }[keywords,strings] 173 | 174 | \lstnewenvironment{coq}{\lstset{language=Coq}}{} 175 | % pour inliner dans le texte 176 | \def\coqinline{\lstinline[language=Coq, basicstyle=\normalsize]} 177 | % pour inliner dans les tableaux / displaymath... 178 | \def\coqinlines{\lstinline[language=Coq]} 179 | \def\coqe{\lstinline[language=Coq, basicstyle=\small]} 180 | -------------------------------------------------------------------------------- /papers/coq-workshop-12/lsthaskell.sty: -------------------------------------------------------------------------------- 1 | % lstlisting Haskell style (inspired from a file of Assia Mahboubi) 2 | % 3 | \lstdefinelanguage{Haskell}{ 4 | % 5 | % Anything betweeen $ becomes LaTeX math mode 6 | mathescape=true, 7 | % 8 | % Comments may or not include Latex commands 9 | texcl=false, 10 | % 11 | morekeywords=[1]{class, instance}, 12 | % 13 | morekeywords=[2]{where}, 14 | % 15 | morekeywords=[3]{Maybe}, 16 | % 17 | morekeywords=[4]{main}, 18 | % 19 | morekeywords=[6]{do, last, first, try, idtac, repeat}, 20 | % 21 | % Comments delimiters, we do turn this off for the manual 22 | morecomment=[s]{(*}{*)}, 23 | % 24 | % Spaces are not displayed as a special character 25 | showstringspaces=false, 26 | % 27 | % String delimiters 28 | morestring=[b]", 29 | morestring=[d]’, 30 | % 31 | % Size of tabulations 32 | tabsize=3, 33 | % 34 | % Enables ASCII chars 128 to 255 35 | extendedchars=false, 36 | % 37 | % Case sensitivity 38 | sensitive=true, 39 | % 40 | % Automatic breaking of long lines 41 | breaklines=false, 42 | % 43 | % Default style fors listings 44 | basicstyle=\small, 45 | % 46 | % Position of captions is bottom 47 | captionpos=b, 48 | % 49 | % flexible columns 50 | columns=[l]flexible, 51 | % 52 | % Style for (listings') identifiers 53 | identifierstyle={\ttfamily\color{black}}, 54 | % Style for declaration keywords 55 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 56 | % Style for gallina keywords 57 | keywordstyle=[2]{\ttfamily\color{dkgreen}}, 58 | % Style for sorts keywords 59 | keywordstyle=[3]{\ttfamily\color{ltblue}}, 60 | % Style for tactics keywords 61 | keywordstyle=[4]{\ttfamily\color{dkblue}}, 62 | % Style for terminators keywords 63 | keywordstyle=[5]{\ttfamily\color{dkred}}, 64 | %Style for iterators 65 | %keywordstyle=[6]{\ttfamily\color{dkpink}}, 66 | % Style for strings 67 | stringstyle=\ttfamily, 68 | % Style for comments 69 | commentstyle={\ttfamily\color{dkgreen}}, 70 | % 71 | %moredelim=**[is][\ttfamily\color{red}]{/&}{&/}, 72 | literate= 73 | {->}{{$\rightarrow\;$}}1 74 | {=>}{{$\Rightarrow\;$}}1 75 | {++}{{\code{++}}}1 76 | {~}{{\ }}1 77 | {\\dollar}{{$\$$\;}}1 78 | % 79 | }[keywords,comments,strings] 80 | 81 | \lstnewenvironment{haskell}{\lstset{language=Haskell}}{} 82 | 83 | % pour inliner dans le texte 84 | \def\hasqel{\lstinline[language=Haskell, basicstyle=\small]} 85 | % pour inliner dans les tableaux / displaymath... 86 | \def\haskels{\lstinline[language=Haskell, basicstyle=\scriptsize]} 87 | 88 | %%% Local Variables: 89 | %%% mode: latex 90 | %%% Local IspellDict: british 91 | %%% TeX-master: "main.tex" 92 | %%% End: 93 | -------------------------------------------------------------------------------- /papers/coq-workshop-12/lstocaml.sty: -------------------------------------------------------------------------------- 1 | \lstdefinelanguage{OCaml}{ 2 | % Anything betweeen $ becomes LaTeX math mode 3 | mathescape=true, 4 | % 5 | % Comments may or not include Latex commands 6 | texcl=false, 7 | % 8 | % Vernacular commands 9 | morekeywords=[1]{and, as, assert, begin, class, constraint, do, done, downto, else, end, exception, external, false, for, fun, function, functor, if, in, include, inherit, initializer, lazy, let, match, method, module, mutable, new, object, of, open, or, private, rec, sig, struct, then, to, true, try, type, val, virtual, when, while, with}, 10 | % 11 | % 12 | % Comments delimiters, we do turn this off for the manual 13 | comment=[s]{(*}{*)}, 14 | % 15 | %keepspaces 16 | keepspaces=true, 17 | % Spaces are not displayed as a special character 18 | showstringspaces=false, 19 | % 20 | % String delimiters 21 | morestring=[b]", 22 | morestring=[d]’, 23 | % 24 | % Size of tabulations 25 | tabsize=3, 26 | % 27 | % Enables ASCII chars 128 to 255 28 | extendedchars=false, 29 | % 30 | % Case sensitivity 31 | sensitive=true, 32 | % 33 | % Automatic breaking of long lines 34 | breaklines=true, 35 | % 36 | % Default style fors listings 37 | basicstyle=\small, 38 | % 39 | % Position of captions is bottom 40 | captionpos=b, 41 | % 42 | % Full flexible columns 43 | columns=[l]fullflexible, 44 | % 45 | % Style for (listings') identifiers 46 | identifierstyle={\ttfamily\color{black}}, 47 | % Note : highlighting of Coq identifiers is done through a new 48 | % delimiter definition through an lstset at the begining of the 49 | % document. Don't know how to do better. 50 | % 51 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 52 | % Style for strings 53 | stringstyle=\ttfamily, 54 | % Style for comments 55 | commentstyle={\ttfamily\color{dkgreen}}, 56 | % 57 | %litterate 58 | literate= 59 | {->}{{$\to$\,}}2 60 | {fun}{{$\lambda$\,}}3 61 | % {[blank]}{{\mbox{~}}}1 62 | {'a}{{$\alpha$}}1 63 | {'b}{{$\beta$}}1 64 | {>>}{{$\gg$}}1 65 | {>>|}{{$\gg\mid$}}1 66 | {\\eqac}{{$\equiv_{AC}$}}1 67 | {->}{{$\rightarrow$}}1 68 | {|triangle}{{$\triangle$}}1 69 | {|kreuz_1}{{$\kreuz_1$}}1 70 | {|kreuz_2}{{$\kreuz_2$}}1 71 | {|kreuz_3}{{$\kreuz_3$}}1 72 | {sigma}{{$\sigma$}}1 73 | {p_1}{{$p_1$}}1 74 | {p_2}{{$p_2$}}1 75 | {t_1}{{$t_1$}}1 76 | {t_2}{{$t_2$}}1 77 | {p_i}{{$p_i$}}1 78 | {t_i}{{$t_i$}}1 79 | {\\tab}{{$\qquad$}}1 80 | {[blank]}{{\ }}1 81 | % 82 | }[keywords,comments,strings] 83 | 84 | 85 | \lstnewenvironment{ocaml}{\lstset{language=OCaml}}{} 86 | % pour inliner dans le texte 87 | \def\ocamles{\lstinline[language=OCaml, basicstyle=\small]} 88 | % pour inliner dans les tableaux / displaymath... 89 | \def\ocamle{\lstinline[language=OCaml, basicstyle=\normalsize]} 90 | -------------------------------------------------------------------------------- /papers/coq-workshop-12/macros.sty: -------------------------------------------------------------------------------- 1 | \usepackage[utf8]{inputenc} 2 | \usepackage[english]{babel} 3 | \usepackage{amsmath} 4 | \usepackage{amssymb} 5 | \usepackage{stmaryrd} 6 | \usepackage{color,graphicx} 7 | \usepackage[all]{xy} 8 | 9 | % index 10 | \usepackage{makeidx} 11 | 12 | \newcommand{\secref}[1]{\S\ref{#1}} 13 | 14 | % hyperlinks 15 | \definecolor{citecolor}{rgb}{0.0,0.4,0.0} 16 | \definecolor{urlcolor}{rgb}{0.0,0.0,0.4} 17 | \definecolor{linkcolor}{rgb}{0.0,0.0,0.4} 18 | \usepackage[bookmarks=false,breaklinks=true,colorlinks,linkcolor=linkcolor,urlcolor=urlcolor,citecolor=citecolor]{hyperref} 19 | 20 | % listings 21 | \definecolor{ltblue}{rgb}{0,0.4,0.4} 22 | \definecolor{dkblue}{rgb}{0,0.1,0.6} 23 | \definecolor{dkgreen}{rgb}{0,0.4,0} 24 | \definecolor{dkviolet}{rgb}{0.3,0,0.5} 25 | \definecolor{dkred}{rgb}{0.5,0,0} 26 | \usepackage{listings} 27 | 28 | % two listings side by side 29 | \newenvironment{twolistings}% 30 | {\par\noindent\begin{tabular*}{\linewidth}{@{}c@{\extracolsep{\fill}}c@{}}}% 31 | {\end{tabular*}\smallskip\par} 32 | \newenvironment{threelistings}% 33 | {\par\noindent\begin{tabular*}{\linewidth}{@{}c@{\extracolsep{\fill}}c@{\extracolsep{\fill}}c@{}}}% 34 | {\end{tabular*}\smallskip\par} 35 | 36 | % misc 37 | \newcommand\code[1]{{\tt\small #1}} 38 | \newcommand\st\mid 39 | \newcommand{\eqdef}{\triangleq} 40 | 41 | 42 | % désactivé pour la soummission 43 | % \newcommand\red[1]{{\color{red}{#1}}} 44 | % \newcommand\thomas[1]{\footnote{\red{\textbf{tb:}#1}}} 45 | % \newcommand\damien[1]{\footnote{\red{\textbf{dp:}#1}}} 46 | \newcommand\red[1]{} 47 | \newcommand\thomas[1]{} 48 | \newcommand\damien[1]{} 49 | \newcommand\berry[1]{} 50 | % \newcommand\berry[1]{\marginpar{\textbf{gb:~}#1}} 51 | 52 | % divers 53 | \newcommand \tuple[1]{\langle{#1}\rangle} 54 | \newcommand \set[1]{\left\{#1 \right\}} 55 | \newcommand \paren[1]{\left({#1}\right)} 56 | \newcommand \card[1] {|#1|} 57 | 58 | \newcommand \nospell[1]{#1} 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /papers/coq-workshop-12/main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/papers/coq-workshop-12/main.pdf -------------------------------------------------------------------------------- /papers/coq-workshop-12/main.tex: -------------------------------------------------------------------------------- 1 | \documentclass[a4]{article} 2 | \usepackage{fullpage} 3 | \usepackage{macros} 4 | \usepackage{lstcoq} 5 | \usepackage{mathpartir} 6 | 7 | \usepackage{amsfonts} 8 | 9 | \usepackage[maxnames=6,style=numeric-comp,hyperref=true,bibencoding=inputenc]{biblatex} 10 | \bibliography{synthesis} 11 | 12 | \title{Formal verification of hardware synthesis} 13 | \author{ 14 | Thomas Braibant\\ 15 | University of Grenoble, 16 | currently visiting MIT 17 | \and 18 | Adam Chlipala\\ 19 | MIT 20 | } 21 | \date{Coq Workshop 2012} 22 | \newcommand\project{BabyHardCert} 23 | 24 | \begin{document} 25 | 26 | \maketitle 27 | 28 | Verification of hardware designs has been thoroughly investigated, and 29 | yet, obtaining provably correct hardware of significant complexity is 30 | usually considered challenging and time-consuming. 31 | % 32 | On the one hand, a common practice in hardware verification is to take a given design 33 | written in an hardware description language like Verilog or VHDL, 34 | and argue about this design in a formal way using a model checker or 35 | an SMT solver. 36 | % 37 | On the second hand, a completely different approach is to design hardware via a 38 | shallow-embedding of circuits in a theorem 39 | prover~\cite{hanna-veritas,UCAM-CL-TR-77,hunt89,vamp,certifying-circuits-in-type-theory}. 40 | % 41 | Yet, both kind of approach suffer from the fact that most hardware 42 | designs are expressed in low-level RTL languages like Verilog or 43 | VHDL, and that the level of abstraction they provide may be too low to 44 | do short and meaningful proof of high-level properties. 45 | 46 | \medskip 47 | 48 | To raise this level of abstraction, industry moved to \emph{hardware 49 | synthesis} using higher-level languages, e.g., System-C, 50 | Esterel~\cite{DBLP:conf/birthday/Berry00} or 51 | Bluespec~\cite{bluespec}, in which a high-level source program is 52 | compiled to an RTL description. 53 | % 54 | High-level synthesis has two benefits. 55 | % 56 | First, it reduces the effort necessary to produce an hardware design. 57 | % 58 | Second, writing or reasoning about a high-level program is simpler 59 | than reasoning about the (much more complicated) RTL description 60 | generated by a compiler. 61 | % 62 | However, the downside of high-level synthesis is that there is no 63 | formal guarantee that the generated circuit description behaves 64 | exactly as prescribed by the semantics of the source 65 | program, making verification on the high-level program useless in the 66 | presence of compiler-introduced bugs. 67 | % 68 | 69 | \medskip 70 | 71 | We are currently working on a project that address this issue. That 72 | is, we investigate the formal verification of a (toy) compiler from a 73 | Bluespec-inspired language called \project{} to RTL, quite 74 | literally applying the ideas behind the CompCert 75 | project~\cite{Leroy-Compcert-CACM} to hardware synthesis. 76 | 77 | \medskip 78 | 79 | \project{} can be seen as a stripped-down and simplified version 80 | of Bluespec: in both languages, hardware designs are described in 81 | terms of \emph{guarded atomic actions} on storage elements. 82 | % 83 | In our development, we define a (dependently-typed) deep-embedding of 84 | the \project{} programming language in Coq using \emph{parametric 85 | higher-order abstract syntax (PHOAS)}~\cite{phoas-chlipala}, and 86 | give it a semantics using an interpreter: the semantics of a program 87 | is a Coq function that takes as inputs the current state of the 88 | storage elements and a list of updates to be commited to this storage 89 | elements, and produces another list of updates to be commited. 90 | % 91 | The one odditiy here is that this language and its semantics have a 92 | flavour of \emph{transactional memory}, where updates to state 93 | elements are not visible before the end of the transaction (a 94 | time-step). 95 | % 96 | Our target language can be sensibly interpreted as \emph{clocked 97 | sequential machines}: we generate an RTL description syntactically 98 | described as combinational definitions and next-state 99 | assignements. (Note that we do not investigate yet the correctness of an 100 | \emph{actual} implementation of this RTL description using the 101 | synthesisable subsets of Verilog or VHDL.) 102 | 103 | \medskip 104 | 105 | In this talk, we shall present the current state of our development, 106 | and highlight some of its features. For instance, we look forward to 107 | discuss the oddities of the semantics of our hardware description 108 | languages, as well as the payoffs of our various implementation choices, 109 | including the use of PHOAS. 110 | 111 | \newpage 112 | 113 | \printbibliography 114 | 115 | \end{document} 116 | -------------------------------------------------------------------------------- /papers/coq-workshop-12/mathpartir.sty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/papers/coq-workshop-12/mathpartir.sty -------------------------------------------------------------------------------- /papers/coq-workshop-12/synthesis.bib: -------------------------------------------------------------------------------- 1 | % Publisher 2 | 3 | @string{ap="Academic Press"} 4 | @string{cup="Cambridge University Press"} 5 | @string{mcgh="Mc Graw-Hill"} 6 | @string{nh="North Holland"} 7 | @string{sv="Springer"} 8 | @string{aw="Addison-Wesley"} 9 | @string{ph="Prentice Hall"} 10 | @string{mp="The MIT Press"} 11 | @string{acmp="ACM Press"} 12 | 13 | % Institutions-Schools 14 | 15 | @string{cmum="Carnegie-Mellon Univ., Dept. of Math."} 16 | @string{cucs="Cornell Univ., Dept. of Comp. Sci."} 17 | @string{eth="E.T.H. Zurich"} 18 | @string{eucs="Edinburgh Univ., Dept. of Comp. Sci."} 19 | @string{mit="Massachusetts Institute of Technology"} 20 | @string{lfcs="LFCS, Dept. of Comp. Sci., Edinburgh Univ."} 21 | @string{lip="LIP -- ENS Lyon"} 22 | @string{hal="http://hal.archives-ouvertes.fr/"} 23 | @string{uccl="Cambridge Univ., Computer Lab"} 24 | 25 | @string{acm="ACM"} 26 | @string{ieee="IEEE"} 27 | @string{bl="Bell Laboratories"} 28 | 29 | % Journals 30 | 31 | @string{acta="Acta Informatica"} 32 | @string{acmsigp="ACM Sigplan Notices"} 33 | @string{a&l="Algebra and Logic"} 34 | @string{aml="Annals of Mathematical Logic"} 35 | @string{amstran="Trans. AMS"}, 36 | @string{au="Algebra Universalis"} 37 | @string{cmsjb="Colloquia Mathematica Societatis Janos Bolyai"}, 38 | @string{dm="Dissertationes Mathematicae"} 39 | @string{fm="Fundamenta Matematicae"} 40 | @string{ic="Information and Computation"} 41 | @string{im="Indagationes Mathematicae"} 42 | @string{jcss="JCSS"} 43 | @string{jlap="Journal of Logic and Algebraic Programming"} 44 | @string{jmscs="Journal of Math. Struct. in Computer Science"} 45 | @string{jpaa="Journal of Pure and Applied Algebra"} 46 | @string{jsl="Journal of Symbolic Logic"} 47 | @string{mpcps="Math. Proc. Camb. Phil. Soc."} 48 | @string{mst="Mathematical System Theory"} 49 | @string{rmup="Rivista Matematica dell' Universita' di Parma"} 50 | @string{siamjc="SIAM Journal of Computing"} 51 | @string{tpls="ACM Trans. on Progr. Lang. and Sys."} 52 | @string{tcl="ACM Trans. on Comput. Logic"} 53 | @string{tcs="Theoretical Computer Science"} 54 | @string{zml="Zeitschrift fur Mathematische Logik"} 55 | @string{zmlgm="Zeitschr. f. math. Logik und Grundlagen d. Math."} 56 | @string{entcs="Electronical Notes in Computer Science"} 57 | @string{jar={Journal of Automated Reasoning}} 58 | 59 | % Series 60 | 61 | %@string{lncs="Lecture Notes in Computer Science"} 62 | @string{lncs="LNCS"} 63 | @string{lnm="Lecture Notes in Mathematics"} 64 | @string{csam="Cambridge Studies in Advanced Mathematics"} 65 | @string{sl="Studies in Logic"} 66 | 67 | % Collections 68 | 69 | @string{ash="Applications of Sheaves"} 70 | @string{asls82="Atti della Scuola di Logica di Siena, 1982"} 71 | @string{bcs="The L.E.J. Brouwer Centenary Symposium"} 72 | @string{hbc="To H.B. Curry: essays in Combinatory Logic, 73 | lambda calculus and Formalisms"} 74 | @string{hml="Handbook of Mathematical Logic"} 75 | @string{hphl="Handbook of Philosophical Logic"} 76 | 77 | @TechReport{UCAM-CL-TR-77, 78 | author = {M. Gordon}, 79 | title = {{W}hy {H}igher-{O}rder {L}ogic is a {G}ood 80 | {F}ormalism for {S}pecifying and {V}erifying 81 | {H}ardware}, 82 | institution = uccl, 83 | issn = {1476-2986}, 84 | number = {UCAM-CL-TR-77}, 85 | year = 1985, 86 | } 87 | 88 | @inproceedings{DBLP:conf/birthday/Berry00, 89 | author = {G. Berry}, 90 | title = {The foundations of Esterel}, 91 | booktitle = {Proof, Language, and Interaction, Essays in Honour of Robin 92 | Milner}, 93 | publisher = {The MIT Press}, 94 | year = 2000, 95 | isbn = {978-0-262-16188-6}, 96 | } 97 | 98 | 99 | @inproceedings{hunt89, 100 | author = {W. A. Hunt Jr. and B. Brock}, 101 | title = {{The Verification of a Bit-slice ALU}}, 102 | booktitle = {{Hardware Specification, Verification and 103 | Synthesis}}, 104 | year = 1989, 105 | pages = {282-306}, 106 | publisher = sv, 107 | series = lncs, 108 | volume = 408, 109 | } 110 | 111 | 112 | @inproceedings{hanna-veritas, 113 | author = {F. K. Hanna and N. Daeche and M. Longley}, 114 | title = {{Veritas$^{\mbox{+}}$: A Specification Language 115 | Based on Type Theory}}, 116 | booktitle = {{Hardware Specification, Verification and 117 | Synthesis}}, 118 | publisher = sv, 119 | series = lncs, 120 | year = 1989, 121 | pages = {358-379}, 122 | } 123 | 124 | @article{vamp, 125 | author = {S. Beyer and 126 | C. Jacobi and 127 | D. Kr{\"o}ning and 128 | D. Leinenbach and 129 | W. J. Paul}, 130 | title = {Putting it all together - Formal verification of the VAMP}, 131 | journal = {STTT}, 132 | volume = {8}, 133 | number = {4-5}, 134 | year = {2006}, 135 | pages = {411-430}, 136 | ee = {http://dx.doi.org/10.1007/s10009-006-0204-6}, 137 | bibsource = {DBLP, http://dblp.uni-trier.de} 138 | } 139 | 140 | @article{certifying-circuits-in-type-theory, 141 | author = {S. Coupet-Grimal and L. Jakubiec}, 142 | title = {Certifying circuits in Type Theory}, 143 | journal = {Formal Asp. Comput.}, 144 | volume = 16, 145 | number = 4, 146 | year = 2004, 147 | pages = {352-373}, 148 | ee = {http://dx.doi.org/10.1007/s00165-004-0048-3}, 149 | bibsource = {DBLP, http://dblp.uni-trier.de} 150 | } 151 | 152 | @article{Leroy-Compcert-CACM, 153 | author = {X. Leroy}, 154 | title = {Formal verification of a realistic compiler}, 155 | journal = {CACM}, 156 | year = 2009, 157 | volume = 52, 158 | number = 7, 159 | pages = {107--115}, 160 | urlpublisher = {http://doi.acm.org/10.1145/1538788.1538814}, 161 | hal = {http://hal.archives-ouvertes.fr/inria-00415861/}, 162 | pubkind = {journal-int-mono}, 163 | abstract = {This paper reports on the development and formal verification (proof 164 | of semantic preservation) of CompCert, a compiler from Clight (a 165 | large subset of the C programming language) to PowerPC assembly code, 166 | using the Coq proof assistant both for programming the compiler and 167 | for proving its correctness. Such a verified compiler is useful in 168 | the context of critical software and its formal verification: the 169 | verification of the compiler guarantees that the safety properties 170 | proved on the source code hold for the executable compiled code as 171 | well.} 172 | } 173 | 174 | 175 | @inproceedings{phoas-chlipala, 176 | author = {A. Chlipala}, 177 | title = {Parametric higher-order abstract syntax for mechanized semantics}, 178 | booktitle = {Proc.\ ICFP}, 179 | year = {2008}, 180 | pages = {143-156}, 181 | publisher = {ACM}, 182 | } 183 | 184 | 185 | @Manual{bluespec, 186 | title = {{B}luespec {L}anguage definition}, 187 | author = {L. Augustsson and J. Schwarz and R. S. Nikhil}, 188 | year = {2001} 189 | } 190 | 191 | -------------------------------------------------------------------------------- /papers/fe-si-submission.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/papers/fe-si-submission.pdf -------------------------------------------------------------------------------- /question.txt: -------------------------------------------------------------------------------- 1 | - bitvector in HOL4 (not sat, because of the sizes) 2 | - bluespec optimisations (firing multiple rules simultaneously) 3 | 4 | Anthony fox talk: 5 | - type system with non-recursive sums, records, products, map 6 | - run : instruction -> state -> unit * state 7 | -------------------------------------------------------------------------------- /simple-verilog/Fifo.v: -------------------------------------------------------------------------------- 1 | 2 | 3 | module Fifo 4 | ( clk 5 | , rst_n 6 | , enqRdy 7 | , enqEn 8 | , enqVal 9 | , deqRdy 10 | , deqEn 11 | , deqVal 12 | ); 13 | parameter width = 1; 14 | 15 | input clk, rst_n; 16 | output enqRdy, deqRdy; 17 | input enqEn, deqEn; 18 | input [width-1:0] enqVal; 19 | output [width-1:0] deqVal; 20 | 21 | reg [width-1:0] data; 22 | reg valid; 23 | 24 | assign deqVal = data; 25 | assign enqRdy = !valid; 26 | assign deqRdy = valid; 27 | 28 | always@(posedge clk) 29 | begin 30 | if(!rst_n) 31 | valid <= 0; 32 | else 33 | begin 34 | if(enqEn) 35 | begin 36 | data <= enqVal; 37 | valid <= 1'b1; 38 | end 39 | else 40 | valid <= 1'b0; 41 | end 42 | end 43 | endmodule 44 | -------------------------------------------------------------------------------- /simple-verilog/Makefile: -------------------------------------------------------------------------------- 1 | clean: 2 | rm -f a.out 3 | 4 | all: 5 | iverilog *.v 6 | 7 | .PHONY: all clean 8 | .DEFAULT_GOAL := all 9 | -------------------------------------------------------------------------------- /simple-verilog/Test.v: -------------------------------------------------------------------------------- 1 | module Test(clk, rst_n); 2 | parameter width = 1; 3 | input clk, rst_n; 4 | reg [width-1:0] enqValReg; 5 | 6 | always@(posedge clk) 7 | begin 8 | if(!rst_n) 9 | enqValReg <= 0; 10 | else if(enqEn) 11 | enqValReg <= enqValReg + 1; 12 | end 13 | wire enqEn, deqEn, enqRdy, deqRdy; 14 | wire [width-1:0] deqVal, enqVal; 15 | 16 | assign enqEn = enqRdy; 17 | assign deqEn = deqRdy; 18 | assign enqVal = enqValReg; 19 | 20 | always@(posedge clk) 21 | begin 22 | if(rst_n) 23 | if(enqEn) 24 | $display("enqVal: %d", enqVal); 25 | end 26 | 27 | always@(posedge clk) 28 | if(rst_n) 29 | if(deqEn) 30 | $display(" deqVal: %d", deqVal); 31 | 32 | Fifo#(width) localName (clk, rst_n, enqRdy, enqEn, enqVal, deqRdy, deqEn, deqVal); 33 | endmodule 34 | -------------------------------------------------------------------------------- /simple-verilog/main.v: -------------------------------------------------------------------------------- 1 | module top; 2 | reg clk; 3 | reg rst_n; 4 | 5 | initial 6 | begin 7 | clk = 0; 8 | rst_n = 0; 9 | #40 rst_n = 1; 10 | end 11 | 12 | always 13 | #5 clk = ~ clk; 14 | 15 | parameter width = 32; 16 | 17 | Test#(width) localName(clk, rst_n); 18 | endmodule 19 | -------------------------------------------------------------------------------- /src/Compare.v: -------------------------------------------------------------------------------- 1 | Require Import Setoid. 2 | 3 | (** Results about lexicographic order *) 4 | 5 | Notation lex x y := 6 | (match x with 7 | | Eq => y 8 | | c => c 9 | end). 10 | 11 | Section t. 12 | Variable A B: Type. 13 | Variable f : A -> A -> comparison. 14 | Variable g : B -> B -> comparison. 15 | Hypothesis Hf_sym: forall x y, f x y = CompOpp (f y x). 16 | Hypothesis Hf_trans:forall c x y z, f x y = c -> f y z = c -> f x z = c. 17 | Hypothesis Hg_sym: forall x y, g x y = CompOpp (g y x). 18 | Hypothesis Hg_trans:forall c x y z, g x y = c -> g y z = c -> g x z = c. 19 | 20 | Hint Resolve Hf_sym Hf_trans Hg_sym Hg_trans : lex. 21 | Lemma lex_sym x1 x2 y1 y2: lex (f x1 x2) (g y1 y2) = CompOpp (lex (f x2 x1) (g y2 y1)). 22 | Proof. 23 | repeat match goal with 24 | |- context [f ?x ?y] => case_eq (f x y); intros ? 25 | | |- context [f ?x ?y] => case_eq (g x y); intros ? 26 | | H : f ?x ?y = _, H' : f ?y ?x = _ |- _ => 27 | rewrite Hf_sym, H' in H; simpl in H; clear H'; try discriminate 28 | end; simpl; try eauto with lex. 29 | Qed. 30 | 31 | Lemma CompOpp_move x y : CompOpp x = y <-> x = CompOpp y. 32 | destruct x; destruct y; simpl; intuition discriminate. 33 | Qed. 34 | 35 | Lemma Hf_sym' c x y : f x y = CompOpp c -> f y x = c. 36 | Proof. 37 | intros. rewrite Hf_sym. rewrite CompOpp_move. assumption. 38 | Qed. 39 | 40 | Hint Resolve Hf_sym' : lex. 41 | 42 | Lemma lex_trans c x1 x2 x3 y1 y2 y3: 43 | lex (f x1 x2) (g y1 y2) = c -> 44 | lex (f x2 x3) (g y2 y3) = c -> 45 | lex (f x1 x3) (g y1 y3) = c. 46 | Proof. 47 | Ltac finish := 48 | repeat match goal with 49 | | H : ?x = ?y, H' : ?x = ?z |- _ => constr_eq y z; clear H' 50 | | H : ?x = ?y, H' : ?x = ?z |- _ => 51 | rewrite H in H'; discriminate 52 | end; simpl; try eauto with lex. 53 | 54 | repeat match goal with 55 | |- context [f ?x ?y] => case_eq (f x y); intros ? 56 | | |- context [f ?x ?y] => case_eq (g x y); intros ? 57 | | H : f ?x ?y = _, H' : f ?y ?x = _ |- _ => 58 | rewrite Hf_sym, H' in H; simpl in H; clear H'; try discriminate 59 | | H : f ?x ?y = _, H' : f ?y ?z = _ |- _ => 60 | pose proof (Hf_trans _ _ _ _ H H'); clear H H' 61 | end; finish. 62 | 63 | assert (f x2 x3 = Eq) by eauto with lex; finish. 64 | assert (f x1 x2 = Gt) by eauto with lex; finish. 65 | assert (f x2 x3 = Eq) by eauto with lex; finish. 66 | assert (f x1 x2 = Lt) by eauto with lex; finish. 67 | assert (f x1 x2 = Eq) by eauto with lex; finish. 68 | assert (f x2 x3 = Gt) by eauto with lex; finish. 69 | congruence. 70 | assert (f x1 x2 = Eq) by eauto with lex; finish. 71 | assert (f x2 x3 = Lt) by eauto with lex; finish. 72 | congruence. 73 | Qed. 74 | End t. 75 | -------------------------------------------------------------------------------- /src/Compiler.v: -------------------------------------------------------------------------------- 1 | Require Core Front IR RTL CSE CP FirstOrder. 2 | 3 | (** Putting it all together: the final compiler *) 4 | 5 | Definition fesic Phi t (a : forall Var, Front.action Phi Var t) : RTL.Block Phi t := 6 | let x := IR.Compile Phi t a in 7 | let x := RTL.Compile Phi t x in 8 | let x := CSE.Compile Phi t x in 9 | let x := CP.Compile Phi t x in (* We use the notation BDD.compile in the paper here *) 10 | let x := CSE.Compile Phi t x in 11 | x. 12 | 13 | 14 | (** The proof of the compiler relies on the so-called PHOAS axiom that 15 | states that programs are really parametric in the choice of the 16 | representations of variables. Past papers on PHOAS discuss the use 17 | of this axiom: 18 | - http://adam.chlipala.net/papers/PhoasICFP08/ 19 | - http://adam.chlipala.net/papers/ImpurePOPL10/ 20 | 21 | Note that we could alleviate our use of this axiom by proving that 22 | compilation preserves a notion of well-formedness, and that every 23 | source program is well-formed. *) 24 | 25 | Axiom HWF : forall Phi t p, RTL.WF Phi t p. 26 | Lemma fesic_correct (Phi : Core.state) t a : 27 | let block := fesic Phi t a in 28 | forall st, 29 | RTL.Next Phi st t block = 30 | Front.Next Phi st a. 31 | Proof. 32 | unfold fesic. intros. 33 | repeat 34 | (first 35 | [ 36 | rewrite CSE.Compile_correct by apply HWF| 37 | rewrite CP.Compile_correct by apply HWF]). 38 | 39 | rewrite RTL.Compile_correct. 40 | rewrite IR.Compile_correct. 41 | reflexivity. 42 | Qed. 43 | 44 | Definition Fesic Phi t src := 45 | let x := (fesic Phi t src) in 46 | let x := FirstOrder.compile Phi t (x _ ) in 47 | Some x. 48 | 49 | -------------------------------------------------------------------------------- /src/Consider.v: -------------------------------------------------------------------------------- 1 | (** The [consider] tactic recovers some of the ease of reasoning about 2 | decision procedures when they are implemented as functions into bool. 3 | 4 | Implementation by Thomas Braibant (thomas.braibant@gmail.com) 5 | *) 6 | Require Setoid. 7 | 8 | (** This file defines some inductives, type-classes and tactics to 9 | perform reflection on a small scale. Tribute given to ssreflect. *) 10 | 11 | (** Two inductives to perform case-based reasonning *) 12 | Inductive reflect (P Q : Prop) : bool -> Type := 13 | | reflect_true : P -> reflect P Q true 14 | | reflect_false : Q -> reflect P Q false. 15 | 16 | Inductive semi_reflect (P : Prop) : bool -> Type := 17 | | semi_reflect_true : P -> semi_reflect P true 18 | | semi_reflect_false : semi_reflect P false. 19 | 20 | Lemma iff_to_reflect {A B} (P : A -> B -> Prop) (T : A -> B -> bool) : 21 | (forall x y, T x y = true <-> P x y) -> 22 | (forall x y, reflect (P x y) (~P x y) (T x y)). 23 | Proof. 24 | intros. case_eq (T x y); intros Hxy; constructor. 25 | rewrite <- H; auto. 26 | intros Hf; rewrite <- H, Hxy in Hf; discriminate. 27 | Qed. 28 | 29 | Lemma impl_to_semireflect {A B} (P : A -> B -> Prop) (T : A -> B -> bool) : 30 | (forall x y, T x y = true -> P x y) -> 31 | (forall x y, semi_reflect (P x y) (T x y)). 32 | Proof. 33 | intros. case_eq (T x y); intros Hxy; constructor. 34 | apply H; auto. 35 | Qed. 36 | 37 | Lemma reflect_true_inv P Q : reflect P Q true -> P. 38 | Proof. 39 | exact (fun x => match x in reflect _ _ b 40 | return if b then P else ID 41 | with | reflect_true H => H | reflect_false H => (fun _ x => x) end). 42 | Qed. 43 | 44 | Lemma reflect_false_inv P Q : reflect P Q false -> Q. 45 | Proof. 46 | exact (fun x => match x in reflect _ _ b 47 | return if b then ID else Q 48 | with | reflect_true H => fun _ x => x | reflect_false H => H end). 49 | Qed. 50 | 51 | Lemma semi_reflect_true_inv P : semi_reflect P true -> P. 52 | Proof. 53 | exact (fun x => match x in semi_reflect _ b 54 | return if b then P else ID 55 | with | semi_reflect_true H => H | semi_reflect_false => (fun _ x => x) end). 56 | Qed. 57 | 58 | 59 | Class Reflect (T : bool) (P Q : Prop) := _Reflect : reflect P Q T. 60 | Class SemiReflect (T : bool) (P : Prop) := _SemiReflect : semi_reflect P T. 61 | 62 | Global Instance Reflect_default (T : bool) : Reflect T (T = true) (T = false) | 100. 63 | Proof. 64 | unfold Reflect; destruct T; constructor; auto. 65 | Qed. 66 | 67 | Section boolean_logic. 68 | Ltac t := 69 | repeat match goal with 70 | | H: Reflect true ?P ?Q |- _ => apply (reflect_true_inv P Q) in H 71 | | H: Reflect false ?P ?Q |- _ => apply (reflect_false_inv P Q) in H 72 | end. 73 | 74 | Context {T1 T2 P1 Q1 P2 Q2} {R1 : Reflect T1 P1 Q1} {R2: Reflect T2 P2 Q2}. 75 | 76 | Global Instance Reflect_andb : Reflect (T1 && T2)%bool (P1 /\ P2) (Q1 \/ Q2). 77 | Proof. 78 | destruct T1; destruct T2; t; constructor; tauto. 79 | Qed. 80 | 81 | Global Instance Reflect_orb : Reflect (T1 || T2)%bool (P1 \/ P2) (Q1 /\ Q2). 82 | Proof. 83 | destruct T1; destruct T2; t; constructor; tauto. 84 | Qed. 85 | 86 | Global Instance Reflect_negb : Reflect (negb T1)%bool Q1 P1. 87 | Proof. 88 | destruct T1; t; constructor; tauto. 89 | Qed. 90 | 91 | End boolean_logic. 92 | 93 | Require Arith. 94 | Section reflect_peano. 95 | 96 | Global Instance Reflect_eqb_nat x y : Reflect (EqNat.beq_nat x y) (x = y) (x <> y). 97 | Proof. 98 | apply iff_to_reflect. 99 | apply EqNat.beq_nat_true_iff. 100 | Qed. 101 | 102 | Global Instance Reflect_leb_nat x y : Reflect (NPeano.leb x y) (x <= y) (y < x). 103 | Proof. 104 | intros. case_eq (NPeano.leb x y); intros; constructor. 105 | apply NPeano.leb_le in H; auto. 106 | destruct (Compare_dec.le_lt_dec x y); auto. 107 | exfalso. 108 | apply NPeano.leb_le in l; auto. congruence. 109 | Qed. 110 | 111 | Global Instance Reflect_ltb_nat x y : Reflect (NPeano.ltb x y) (x < y) (y <= x). 112 | Proof. 113 | intros. case_eq (NPeano.ltb x y); intros; constructor. 114 | apply NPeano.ltb_lt in H; auto. 115 | destruct (Compare_dec.le_lt_dec y x); auto. 116 | exfalso. 117 | apply NPeano.ltb_lt in l; auto. congruence. 118 | Qed. 119 | End reflect_peano. 120 | 121 | Global Instance Reflect_bool_dec a b : Reflect (Bool.eqb a b) (a = b) (a <> b). 122 | Proof. 123 | apply iff_to_reflect; auto using Bool.eqb_true_iff. 124 | Qed. 125 | 126 | (** The main tactic. [consider f] will perform case-analysis (using 127 | [case]) on the function symbol [f] using a reflection-lemma that is 128 | inferred by type-class resolution. *) 129 | 130 | Ltac consider f := 131 | let rec clean := 132 | match goal with 133 | | |- true = true -> _ => intros _ ; clean 134 | | |- false = true -> _ => discriminate 135 | | |- ?P1 -> ?P2 => 136 | let H := fresh in intros H ; clean; revert H 137 | | |- _ => idtac 138 | end 139 | in 140 | (repeat match goal with 141 | | [ H : context [ f ] |- _ ] => 142 | revert H 143 | end) ; 144 | match type of f with 145 | | sumbool _ _ => 146 | destruct f 147 | | _ => 148 | match goal with 149 | | _ => 150 | ((let c := constr:(_ : Reflect f _ _) in 151 | case c)) (*; 152 | let H := fresh in 153 | intros H; try rewrite H; revert H)) *) 154 | | _ => 155 | ((let c := constr:(_ : SemiReflect f _) in 156 | case c)) (*; 157 | let H := fresh in 158 | try (intros H; try rewrite H; revert H))) *) 159 | | _ => 160 | (** default to remembering the equality **) 161 | case_eq f 162 | end 163 | end ; clean. 164 | 165 | (** Some tests *) 166 | Section test. 167 | Require Import NPeano Bool. 168 | 169 | Require Import Omega. 170 | Goal forall x y z, (ltb x y && ltb y z) = true -> 171 | ltb x z = true. 172 | intros x y z. 173 | consider (ltb x y && ltb y z). 174 | consider (ltb x z); auto. intros. exfalso. omega. 175 | Qed. 176 | 177 | Goal forall x y z, 178 | ltb x y = true -> 179 | ltb y z = true -> 180 | ltb x z = true. 181 | Proof. 182 | intros. consider (ltb x y); consider (ltb y z); consider (ltb x z); intros; auto. 183 | exfalso; omega. 184 | Qed. 185 | 186 | End test. 187 | -------------------------------------------------------------------------------- /src/Core.v: -------------------------------------------------------------------------------- 1 | (** * Synthesis.Core : Defining the memory model underlying the compiler*) 2 | Require Import Common. 3 | Require Import DList. 4 | Require Word Vector. 5 | 6 | 7 | Unset Elimination Schemes. 8 | 9 | (** Definition of types *) 10 | 11 | Inductive type : Type := 12 | | Tunit : type 13 | | Tbool: type 14 | | Tint: forall (n : nat), type 15 | | Ttuple : forall l : list type, type. 16 | 17 | (** Notations used in the paper *) 18 | Notation Unit := Tunit. 19 | Notation B := Tbool. 20 | Notation Int n := (Tint n). 21 | Notation Tuple l := (Ttuple l). 22 | 23 | Section type_ind. 24 | Variable P : type -> Prop. 25 | Variable Hunit : P Tunit. 26 | Variable Hbool : P Tbool. 27 | Variable Hint : forall n, P (Tint n). 28 | Variable Hnil : P (Ttuple []). 29 | Variable Hcons : forall t q, P t -> P (Ttuple q) -> P (Ttuple (t :: q)). 30 | 31 | Definition type_ind (t : type) : P t. 32 | refine (let ind := fix ind t : P t := 33 | match t with 34 | | Tunit => Hunit 35 | | Tbool => Hbool 36 | | Tint n => Hint n 37 | | Ttuple l => 38 | let fix fold l : P (Ttuple l) := 39 | match l with 40 | | nil => Hnil 41 | | cons t q => Hcons t q (ind t) (fold q) 42 | end in 43 | fold l 44 | end 45 | in ind t). 46 | Defined. 47 | End type_ind. 48 | Set Elimination Schemes. 49 | 50 | Fixpoint eval_type st : Type := 51 | match st with 52 | | Tunit => unit 53 | | Tbool => bool 54 | | Tint n => Word.T n 55 | | Ttuple l => Tuple.of_list eval_type l 56 | end. 57 | 58 | Definition eval_type_list l : Type := Tuple.of_list eval_type l. 59 | 60 | Require Import NPeano. 61 | 62 | Definition type_eqb : forall a b : type, bool. 63 | refine (let fix fold a b {struct a}: bool := 64 | let fix pointwise (i j : list type) : bool := 65 | match i, j with 66 | | [] , [] => true 67 | | t::q , t' :: q' => (fold t t' && pointwise q q')%bool 68 | | _, _ => false 69 | end%list in 70 | match a,b with 71 | | Tunit, Tunit => true 72 | | Tbool, Tbool => true 73 | | Tint n, Tint m => Nat.eqb n m 74 | | Ttuple x, Ttuple y => pointwise x y 75 | | _ , _ => false 76 | end in fold 77 | ). 78 | Defined. 79 | 80 | 81 | Fixpoint type_list_eqb (la lb : list type) : bool := 82 | match la,lb with 83 | | [], [] => true 84 | | t :: q , t' :: q' => (type_eqb t t' && type_list_eqb q q' )%bool 85 | | _ , _ => false 86 | end%list. 87 | 88 | 89 | Lemma nat_eqb_eq : forall x y, Nat.eqb x y = true -> x = y. 90 | Proof. 91 | induction x; destruct y; try reflexivity || simpl; try congruence. 92 | auto. 93 | Defined. 94 | 95 | Lemma type_eqb_correct a b : type_eqb a b = true -> a = b. 96 | Proof. 97 | revert b. 98 | induction a; induction b; try simpl; try (reflexivity || congruence). 99 | intros. apply nat_eqb_eq in H. subst. reflexivity. 100 | case_eq (type_eqb a b); simpl; intros. 101 | apply IHa in H. subst. repeat f_equal. specialize (IHa0 (Ttuple q0) H0). congruence. 102 | discriminate. 103 | Defined. 104 | 105 | Lemma type_list_eqb_correct la lb : type_list_eqb la lb = true -> la = lb. 106 | Proof. 107 | revert lb; induction la; destruct lb; simpl; try discriminate; intuition. 108 | rewrite Bool.andb_true_iff in H. destruct H. rewrite (IHla lb); auto. 109 | rewrite (type_eqb_correct a t H). reflexivity. 110 | Qed. 111 | 112 | Lemma type_eqb_refl : forall t, type_eqb t t = true. 113 | Proof. 114 | induction t using type_ind; simpl; firstorder. 115 | apply NPeano.Nat.eqb_eq. reflexivity. 116 | Qed. 117 | 118 | (** Operations on types *) 119 | Section type_ops. 120 | 121 | Definition eqb_bool (b1 b2: bool) := 122 | match b1,b2 with 123 | | true, true => true 124 | | false, false => true 125 | | _,_ => false 126 | end. 127 | 128 | Fixpoint type_eq (t : type) : eval_type t -> eval_type t -> bool := 129 | match t with 130 | | Tunit => fun _ _ => true 131 | | Tint n => @Word.eqb n 132 | | Tbool => eqb_bool 133 | | Ttuple l => fun _ _ => false 134 | end. 135 | 136 | Lemma type_eq_correct t x y : type_eq t x y = true -> x = y. 137 | Proof. destruct t; simpl in *. 138 | destruct x; destruct y; auto. 139 | destruct x; destruct y; auto. 140 | intros. apply Word.eqb_correct; auto. 141 | discriminate. 142 | Qed. 143 | End type_ops. 144 | 145 | 146 | Module Generics. 147 | Record signature T (E : T -> Type) := mk_signature 148 | { 149 | args : list T; 150 | res : T; 151 | value :> Tuple.of_list E args -> E res 152 | }. 153 | 154 | Arguments mk_signature {T E} args res value. 155 | Arguments args {T E} s. 156 | Arguments res {T E} s. 157 | Arguments value {T E} s _. 158 | 159 | (* could it be a primitive with an empty set of arguments ? *) 160 | Definition constant T (E : T -> Type) (ty : T) := E ty. 161 | Arguments constant {T E} ty. 162 | End Generics. 163 | 164 | Notation signature := (Generics.signature type eval_type). 165 | Notation constant := (@Generics.constant type eval_type). 166 | 167 | Definition Cbool b : constant Tbool := b. 168 | Definition Cword {n} x : constant (Tint n) := (Word.repr _ x). 169 | 170 | (** The definition of state elements. *) 171 | Inductive mem : Type := 172 | | Tinput: forall (t: type), mem 173 | | Treg : forall (t : type), mem 174 | | Tregfile : forall (n : nat) (t : type), mem. 175 | 176 | Notation Input := Tinput. 177 | Notation Reg := Treg. 178 | Notation Regfile := Tregfile. 179 | 180 | 181 | Definition state := list mem. 182 | 183 | Definition eval_mem (s : mem) := 184 | match s with 185 | | Tinput t => eval_type t 186 | | Treg t => eval_type t 187 | | Tregfile n t => Regfile.T n (eval_type t) 188 | end. 189 | 190 | Notation eval_state := (DList.T eval_mem). 191 | -------------------------------------------------------------------------------- /src/README.txt: -------------------------------------------------------------------------------- 1 | These files contain the compiler part of the development associated 2 | with the paper "Formal verification of Hardware Synthesis". 3 | 4 | Running [make] in this directory will compile this 5 | development. However, in order to visit these files, one must either 6 | 7 | - run coqtop, and execute the command 8 | Add Rec LoadPath "./" as Synthesis. 9 | at the beginning of each file. 10 | 11 | - run coqtop with the option 12 | -R "path_to_the_src_folder" "Synthesis" 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Seq.v: -------------------------------------------------------------------------------- 1 | (** A few results on lists. *) 2 | 3 | Section t. 4 | Require List. 5 | Context {A : Type}. 6 | Section In. 7 | 8 | Inductive In (a: A): list A -> Type := 9 | | In_cons : forall tl, In a (a::tl) 10 | | In_skip : forall hd tl, In a tl -> In a (hd::tl). 11 | 12 | Hint Constructors In. 13 | Lemma In_app a l l' : In a (l ++ l') -> 14 | (In a l) + (In a l'). 15 | Proof. 16 | induction l; simpl. 17 | tauto. 18 | intros H. inversion H; subst. left. apply In_cons. 19 | apply IHl in X. destruct X. 20 | left; apply In_skip. auto. auto. 21 | Qed. 22 | 23 | Lemma In_nil : forall a, In a nil -> False. 24 | Proof. 25 | intros a H. inversion H. 26 | Qed. 27 | 28 | Lemma In_cons_inversion : forall a hd tl, 29 | In a (hd :: tl) -> (a = hd) + In a tl. 30 | Proof. 31 | intros a hd tl H. 32 | inversion H; subst; tauto. 33 | Qed. 34 | End In. 35 | End t. -------------------------------------------------------------------------------- /src/Structures.v: -------------------------------------------------------------------------------- 1 | (** Definitions and results about ordered structures. *) 2 | 3 | (** Total order relation *) 4 | Class order (A : Type) := 5 | mk_order 6 | { 7 | le : A -> A -> bool; 8 | le_transitive : forall x y z, le x y = true -> le y z = true -> le x z = true; 9 | le_total : forall x y , le x y = true \/ le y x = true; 10 | le_antisym : forall x y, le x y = true -> le y x = true -> x = y 11 | }. 12 | 13 | Notation "x <= y" := (le x y). 14 | Notation "x < y" := (negb (le y x)). 15 | 16 | Section ops. 17 | Context {A : Type} {O : order A}. 18 | 19 | (* min, max operations *) 20 | Definition min x y := if x <= y then x else y. 21 | Definition max x y := if x <= y then y else x. 22 | 23 | (* compare and swap operation *) 24 | Definition cmp (x y: A) := (min x y, max x y). 25 | 26 | Lemma le_reflexive : forall x, x <= x = true. 27 | Proof. 28 | intros; destruct (le_total x x); auto. 29 | Qed. 30 | End ops. 31 | 32 | 33 | Section monotony. 34 | 35 | (** Monotone functions preserve le *) 36 | 37 | Context {A B : Type} (PA : order A) (PB : order B) (f : A -> B). 38 | 39 | Record monotone := 40 | { 41 | proper_eq : forall a b, a = b -> f a = f b; 42 | proper_le :> forall a b, le a b = true -> le (f a) (f b) = true 43 | }. 44 | 45 | 46 | (** min and max commute with monotone functions *) 47 | 48 | Hypothesis Hf : monotone. 49 | 50 | Lemma min_commute : forall (x y: A), f (min x y) = min (f x) (f y). 51 | Proof. 52 | intros. 53 | unfold min. 54 | destruct (x <= y) eqn:Hxy; destruct (f x <= f y) eqn:Hfxy; trivial. 55 | apply Hf in Hxy. congruence. 56 | destruct (le_total x y). congruence. apply Hf in H. eauto using le_antisym. 57 | Qed. 58 | 59 | Lemma max_commute : forall (x y: A), f (max x y) = max (f x) (f y). 60 | Proof. 61 | intros. 62 | unfold max. 63 | destruct (x <= y) eqn:Hxy; destruct (f x <= f y) eqn:Hfxy; trivial. 64 | apply Hf in Hxy. congruence. 65 | destruct (le_total x y). congruence. apply Hf in H. eauto using le_antisym. 66 | Qed. 67 | 68 | End monotony. 69 | 70 | (** The natural order structures on Booleans *) 71 | Instance bool_order : order bool. 72 | Proof. 73 | refine (mk_order bool (fun x y => negb x || y)%bool _ _ _). 74 | intros [|] [|] [|]; try discriminate; reflexivity. 75 | intros [|] [|]; try discriminate; auto. 76 | intros [|] [|]; try discriminate; reflexivity. 77 | Defined. 78 | -------------------------------------------------------------------------------- /src/Vector.v: -------------------------------------------------------------------------------- 1 | Require Import FMapPositive. 2 | Require Import NArith. 3 | Require Import ZArith. 4 | 5 | Require Word. 6 | 7 | (** Vectors (that is, arrays) *) 8 | Section t. 9 | Variable length : nat. 10 | Variable X : Type. 11 | Definition T := Word.T length -> X. 12 | 13 | Definition set (v : T) (j: Word.T length) (x: X) : T := 14 | fun i => if Word.eqb i j then x else v i. 15 | 16 | Definition get (v: T) (i : Word.T length) : X := 17 | v i. 18 | 19 | Lemma gso (v : T) i j x: 20 | Word.eqb i j = false -> 21 | get (set v i x) j = get v j. 22 | Proof. 23 | intros; unfold get, set. simpl. 24 | replace (Word.eqb j i) with (Word.eqb i j). rewrite H. auto. 25 | rewrite (Bool.eq_iff_eq_true). rewrite ? Word.eqb_correct. intuition. 26 | Qed. 27 | 28 | Lemma gss v i j x: 29 | Word.eqb i j = true -> 30 | get (set v i x) j = x. 31 | Proof. 32 | unfold get, set. intros. 33 | replace (Word.eqb j i) with (Word.eqb i j). rewrite H. auto. 34 | rewrite (Bool.eq_iff_eq_true). rewrite ? Word.eqb_correct. intuition. 35 | Qed. 36 | End t. 37 | 38 | Arguments get {length X} _ _. 39 | Arguments set {length X} _ _ _ _. 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/bdd.ml: -------------------------------------------------------------------------------- 1 | type var = string;; 2 | 3 | type ('a,'b) map = ('a * 'b) list 4 | 5 | type expr = | False | True | N of int 6 | 7 | let pp fmt x = match x with 8 | | True -> Format.fprintf fmt "T" 9 | | False -> Format.fprintf fmt "F" 10 | | N x -> Format.fprintf fmt "%i" x 11 | 12 | 13 | type node = (expr * var * expr) 14 | 15 | type bdd = 16 | { 17 | t : (int , node) map; 18 | h : (node, int) map ; 19 | next : int 20 | } 21 | 22 | let empty = {t = []; h = []; next = 0} 23 | 24 | let node bdd (l : expr) v (h : expr) = 25 | if l = h then l,bdd 26 | else 27 | try 28 | N (List.assoc (l,v,h) bdd.h), bdd 29 | with 30 | Not_found -> 31 | let n = (l,v,h) in 32 | let u = bdd.next in 33 | let bdd = {t = (u,n) :: bdd.t; 34 | h = (n,u) :: bdd.h; 35 | next = u + 1} in 36 | (N u,bdd) 37 | ;; 38 | 39 | module Op = struct 40 | 41 | let rec andb bdd (a : expr) (b : expr) : expr * bdd = 42 | match a,b with 43 | | False, _ | _, False -> False, bdd 44 | | True, f | f, True -> f, bdd 45 | | N a, N b -> 46 | let (l1,v1,h1) = List.assoc a bdd.t in 47 | let (l2,v2,h2) = List.assoc b bdd.t in 48 | if v1 = v2 49 | then 50 | let (x,bdd) = andb bdd l1 l2 in 51 | let (y,bdd) = andb bdd h1 h2 in 52 | node bdd x v1 y 53 | else if v1 < v2 then 54 | let x,bdd = andb bdd l1 (N b) in 55 | let y,bdd = andb bdd h1 (N b) in 56 | node bdd x v1 y 57 | else 58 | let x,bdd = andb bdd (N a) l2 in 59 | let y,bdd = andb bdd (N a) h2 in 60 | node bdd x v2 y 61 | 62 | let rec orb bdd (a : expr) (b : expr) : expr * bdd = 63 | match a,b with 64 | | False, f | f, False -> f, bdd 65 | | True, _ | _, True -> True, bdd 66 | | N a, N b -> 67 | let (l1,v1,h1) = List.assoc a bdd.t in 68 | let (l2,v2,h2) = List.assoc b bdd.t in 69 | if v1 = v2 70 | then 71 | let (x,bdd) = orb bdd l1 l2 in 72 | let (y,bdd) = orb bdd h1 h2 in 73 | node bdd x v1 y 74 | else if v1 < v2 then 75 | let x,bdd = orb bdd l1 (N b) in 76 | let y,bdd = orb bdd h1 (N b) in 77 | node bdd x v1 y 78 | else 79 | let x,bdd = orb bdd (N a) l2 in 80 | let y,bdd = orb bdd (N a) h2 in 81 | node bdd x v2 y 82 | 83 | 84 | let rec negb bdd a = 85 | match a with 86 | | True -> False,bdd 87 | | False -> True,bdd 88 | | N a -> 89 | let (l,v,h) = List.assoc a bdd.t in 90 | let x, bdd = negb bdd l in 91 | let y, bdd = negb bdd h in 92 | node bdd x v y 93 | 94 | let var bdd a = 95 | node bdd False a True 96 | 97 | type t = bdd -> expr * bdd 98 | 99 | let (&&) (a : t) (b : t) : t = fun bdd -> 100 | let (a, bdd) = a bdd in 101 | let (b, bdd) = b bdd in 102 | andb bdd a b 103 | 104 | let (||) (a : t) (b : t) : t = fun bdd -> 105 | let (a, bdd) = a bdd in 106 | let (b, bdd) = b bdd in 107 | orb bdd a b 108 | 109 | let not (a : t) : t = fun bdd -> 110 | let (a,bdd) = a bdd in negb bdd a 111 | 112 | let run (a : t) x : expr * bdd = a x 113 | 114 | let var x : t = fun bdd -> var bdd x 115 | 116 | let (=>) a b = not a || b 117 | 118 | end 119 | 120 | 121 | 122 | let middle x = Op.(x || not x) 123 | let contradiction x = Op.(not (x && not x)) 124 | let chain x y = Op.(x || not y) 125 | 126 | 127 | 128 | let _ = 129 | let test x = Op.(x || (not x )) in 130 | Op.(run (test (var "x" && var "y" || var "x")) empty) 131 | 132 | let _ = 133 | Op.(run (chain (var "x") (chain (var "y") (chain (var "z") (var "x"))) || not (var "x")) empty) 134 | 135 | let _ = Op.(run (var "x" || not (not (var "x"))) empty ) 136 | 137 | let _ = Op.(run ((var "a" && var "b" && var "c") => var "a") empty);; 138 | 139 | -------------------------------------------------------------------------------- /talks/annecy-2013/Makefile: -------------------------------------------------------------------------------- 1 | FIGS=$(wildcard *.fig) 2 | FIGSPDF=$(FIGS:.fig=.pdf) 3 | 4 | talk.pdf: $(FIGSPDF) talk.tex 5 | pdflatex talk 6 | pdflatex talk 7 | 8 | clean: 9 | # rm -f `cat .cvsignore` 10 | rm -f $(FIGSPDF) talk.out talk.nav talk.snm talk.toc talk.vrb talk.log talk.aux talk.pdf 11 | rm -f *.log 12 | rm -rf auto 13 | 14 | 15 | figs: $(FIGSPDF) 16 | 17 | %.pdf: %.fig 18 | fig2dev -L pdf $< $@ 19 | 20 | -------------------------------------------------------------------------------- /talks/annecy-2013/auto/talk.el: -------------------------------------------------------------------------------- 1 | (TeX-add-style-hook "talk" 2 | (lambda () 3 | (LaTeX-add-environments 4 | "remark" 5 | "twolistings") 6 | (TeX-add-symbols 7 | '("behaviors" 1) 8 | '("parenthesis" 1) 9 | '("denote" 1) 10 | '("redbf" 1) 11 | '("bluebf" 1) 12 | '("redemph" 1) 13 | '("bluemph" 1) 14 | "fesi" 15 | "rebind" 16 | "arrow") 17 | (TeX-run-style-hooks 18 | "lstocaml" 19 | "lstcoq" 20 | "graphicx" 21 | "listings" 22 | "mathpartir" 23 | "amsthm" 24 | "amssymb" 25 | "amsmath" 26 | "iwona" 27 | "xcolor" 28 | "babel" 29 | "english" 30 | "txfonts" 31 | "inputenc" 32 | "utf8" 33 | "latex2e" 34 | "beamer10" 35 | "beamer" 36 | "9pt"))) 37 | 38 | -------------------------------------------------------------------------------- /talks/annecy-2013/figs/DC.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/figs/DC.pdf -------------------------------------------------------------------------------- /talks/annecy-2013/figs/DC1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/figs/DC1.pdf -------------------------------------------------------------------------------- /talks/annecy-2013/figs/DC_1.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/figs/DC_1.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/annecy-2013/figs/DC_1.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/figs/DC_1.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/annecy-2013/figs/DC_1.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/figs/DC_1.graffle/image2.pdf -------------------------------------------------------------------------------- /talks/annecy-2013/figs/DC_1.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/figs/DC_1.graffle/image3.pdf -------------------------------------------------------------------------------- /talks/annecy-2013/figs/DC_1.graffle/image4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/figs/DC_1.graffle/image4.pdf -------------------------------------------------------------------------------- /talks/annecy-2013/figs/compilation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/figs/compilation.pdf -------------------------------------------------------------------------------- /talks/annecy-2013/figs/coq-workshop.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/figs/coq-workshop.pdf -------------------------------------------------------------------------------- /talks/annecy-2013/figs/rtl.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/figs/rtl.pdf -------------------------------------------------------------------------------- /talks/annecy-2013/lstcoq.sty: -------------------------------------------------------------------------------- 1 | %======================================================================= 2 | % Définit le style ssr Gallina pour les listings (Assia Mahboubi 2007) 3 | \lstdefinelanguage{Coq}{ 4 | % 5 | % Anything betweeen $ becomes LaTeX math mode 6 | mathescape=true, 7 | % 8 | % Comments may or not include Latex commands 9 | texcl=false, 10 | % 11 | % 12 | % Vernacular commands 13 | morekeywords=[1]{ 14 | Section, Module, End, Require, Import, Export, 15 | Variable, Variables, Parameter, Parameters, Axiom, Hypothesis, Hypotheses, 16 | Notation, Local, Tactic, Reserved, Scope, Open, Close, Bind, Delimit, 17 | Definition, Let, Ltac, Fixpoint, CoFixpoint, Add, Morphism, Relation, 18 | Implicit, Arguments, Set, Unset, Contextual, Strict, Prenex, Implicits, 19 | Inductive, CoInductive, Record, Structure, Canonical, Coercion, 20 | Context, Class, Global, Instance, Program, Infix, 21 | Theorem, Lemma, Corollary, Proposition, Fact, Remark, Example, 22 | Proof, Goal, Save, Qed, Defined, Hint, Resolve, Rewrite, View, 23 | Search, Show, Print, Printing, All, Graph, Projections, inside, outside}, 24 | % 25 | % Gallina 26 | morekeywords=[2]{forall, exists, exists2, fun, fix, cofix, struct, 27 | match, with, end, as, in, return, let, if, is, then, else, 28 | for, of, nosimpl, when}, 29 | % 30 | % Sorts 31 | morekeywords=[3]{Type, Prop, Set}, 32 | % 33 | % Various tactics, some are std Coq subsumed by ssr, for the manual purpose 34 | morekeywords=[4]{ 35 | pose, set, move, case, elim, apply, clear, 36 | hnf, intro, intros, generalize, rename, pattern, after, 37 | destruct, induction, using, refine, inversion, injection, 38 | rewrite, congr, unlock, compute, ring, field, fourier, 39 | replace, fold, unfold, change, cutrewrite, simpl, 40 | have, suff, wlog, suffices, without, loss, nat_norm, 41 | assert, cut, trivial, revert, bool_congr, nat_congr, 42 | symmetry, transitivity, auto, split, autorewrite}, 43 | % symmetry, transitivity, auto, split, left, right, autorewrite}, 44 | % 45 | % Terminators 46 | morekeywords=[5]{ 47 | by, done, exact, reflexivity, tauto, romega, omega, 48 | assumption, solve, contradiction, discriminate}, 49 | % 50 | % Control 51 | morekeywords=[6]{do, last, first, try, idtac, repeat}, 52 | % 53 | % Various symbols 54 | % For the ssr manual we turn off the prettyprint of formulas 55 | % literate= 56 | % {->}{{$\rightarrow\,$}}2 57 | % {->}{{\tt ->}}3 58 | % {<-}{{$\leftarrow\,$}}2 59 | % {<-}{{\tt <-}}2 60 | % {>->}{{$\mapsto$}}3 61 | % {<=}{{$\leq$}}1 62 | % {>=}{{$\geq$}}1 63 | % {<>}{{$\neq$}}1 64 | % {/\\}{{$\wedge$}}2 65 | % {\\/}{{$\vee$}}2 66 | % {<->}{{$\leftrightarrow\;$}}3 67 | % {<=>}{{$\Leftrightarrow\;$}}3 68 | % {:nat}{{$~\in\mathbb{N}$}}3 69 | % {fforall\ }{{$\forall_f\,$}}1 70 | % {forall\ }{{$\forall\,$}}1 71 | % {exists\ }{{$\exists\,$}}1 72 | % {negb}{{$\neg$}}1 73 | % {spp}{{:*:\,}}1 74 | % {~}{{$\sim$}}1 75 | % {\\in}{{$\in\;$}}1 76 | % {/\\}{$\land\,$}1 77 | % {:*:}{{$*$}}2 78 | % {=>}{{$\,\Rightarrow\ $}}1 79 | % {=>}{{\tt =>}}2 80 | % {:=}{{{\tt:=}\,\,}}2 81 | % {==}{{$\equiv$}\,}2 82 | % {!=}{{$\neq$}\,}2 83 | % {^-1}{{$^{-1}$}}1 84 | % {elt'}{elt'}1 85 | % {=}{{\tt=}\,\,}2 86 | % {+}{{\tt+}\,\,}2, 87 | % 88 | % Comments delimiters, we do turn this off for the manual 89 | morecomment=[s]{(**}{**)}, 90 | % 91 | % Spaces are not displayed as a special character 92 | showstringspaces=false, 93 | % 94 | % String delimiters 95 | morestring=[b]", 96 | morestring=[d]’, 97 | % 98 | % Size of tabulations 99 | tabsize=3, 100 | % 101 | % Enables ASCII chars 128 to 255 102 | extendedchars=false, 103 | % 104 | % Case sensitivity 105 | sensitive=true, 106 | % 107 | % Automatic breaking of long lines 108 | breaklines=true, 109 | % 110 | % Default style fors listings 111 | basicstyle=\small, 112 | % 113 | % Position of captions is bottom 114 | captionpos=b, 115 | % 116 | % Full flexible columns 117 | columns=[l]fullflexible, 118 | keepspaces=true, 119 | % 120 | % Style for (listings') identifiers 121 | identifierstyle={\ttfamily\color{black}}, 122 | % Note : highlighting of Coq identifiers is done through a new 123 | % delimiter definition through an lstset at the begining of the 124 | % document. Don't know how to do better. 125 | % 126 | % Style for declaration keywords 127 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 128 | % Style for gallina keywords 129 | keywordstyle=[2]{\ttfamily\color{dkgreen}}, 130 | % Style for sorts keywords 131 | keywordstyle=[3]{\ttfamily\color{ltblue}}, 132 | % Style for tactics keywords 133 | keywordstyle=[4]{\ttfamily\color{dkblue}}, 134 | % Style for terminators keywords 135 | keywordstyle=[5]{\ttfamily\color{dkred}}, 136 | %Style for iterators 137 | %keywordstyle=[6]{\ttfamily\color{dkpink}}, 138 | % Style for strings 139 | stringstyle=\ttfamily, 140 | % Style for comments 141 | commentstyle={\ttfamily\color{dkgreen}}, 142 | % 143 | % 144 | moredelim=**[is][\ttfamily\color{red}]{/&}{&/}, 145 | %litterate 146 | literate= 147 | {\\equiv}{{$\leftrightarrow\,$}}3 148 | {==>}{{$\Rightarrow$}}1 149 | {=>}{{$\Rightarrow$}}1 150 | {>->}{{$\rightarrowtail$}}2 151 | {->}{{$\rightarrow\,$}}2 152 | {<-}{{$\leftarrow\,$}}2 153 | {++}{{$\cup$}}1 154 | {<==}{{$\subseteq$}}1 155 | {|-}{{\quad$\vdash$\quad}}1 156 | {forall}{{$\forall$}}1 157 | {exists}{{$\exists$}}1 158 | {=o=}{{$\circeq$}}1 159 | {\\fun}{{$\lambda$}}1 160 | {|>}{{$\rhd$}}1 161 | {\\oplus}{{$\oplus$}}1 162 | {\\tab}{{\quad}}1 163 | {\\_}{{ }}1 164 | {||}{{$\vee$}}1 165 | {\&\&}{{$\wedge$}}1 166 | {\\bool}{{$\mathbb{B}$}}1 167 | {\\data}{{$\mathbb{T}$}}1 168 | {\\times}{{$\times$}}1 169 | {\\xorb}{{$\otimes$}}1 170 | {\\andb}{{$\wedge$}}1 171 | }[keywords,strings] 172 | 173 | \lstnewenvironment{coq}{\lstset{language=Coq}}{} 174 | \lstnewenvironment{scoq}{\lstset{language=Coq,basicstyle=\scriptsize}}{} 175 | % pour inliner dans le texte 176 | \def\coqinline{\lstinline[language=Coq, basicstyle=\normalsize]} 177 | % pour inliner dans les tableaux / displaymath... 178 | \def\coqinlines{\lstinline[language=Coq]} 179 | \def\coqe{\lstinline[language=Coq, basicstyle=\small]} 180 | -------------------------------------------------------------------------------- /talks/annecy-2013/lstocaml.sty: -------------------------------------------------------------------------------- 1 | \lstdefinelanguage{OCaml}{ 2 | % Anything betweeen $ becomes LaTeX math mode 3 | mathescape=true, 4 | % 5 | % Comments may or not include Latex commands 6 | texcl=false, 7 | % 8 | % Vernacular commands 9 | morekeywords=[1]{and, as, assert, begin, class, constraint, do, done, downto, else, end, exception, external, false, for, fun, function, functor, if, in, include, inherit, initializer, lazy, let, match, method, module, mutable, new, object, of, open, or, private, rec, sig, struct, then, to, true, try, type, val, virtual, when, while, with}, 10 | % 11 | % 12 | % Comments delimiters, we do turn this off for the manual 13 | comment=[s]{(*}{*)}, 14 | % 15 | %keepspaces 16 | keepspaces=true, 17 | % Spaces are not displayed as a special character 18 | showstringspaces=false, 19 | % 20 | % String delimiters 21 | morestring=[b]", 22 | morestring=[d]’, 23 | % 24 | % Size of tabulations 25 | tabsize=3, 26 | % 27 | % Enables ASCII chars 128 to 255 28 | extendedchars=false, 29 | % 30 | % Case sensitivity 31 | sensitive=true, 32 | % 33 | % Automatic breaking of long lines 34 | breaklines=true, 35 | % 36 | % Default style fors listings 37 | basicstyle={\normalsize}, 38 | % 39 | % Position of captions is bottom 40 | captionpos=b, 41 | % 42 | % Full flexible columns 43 | columns=[l]fullflexible, 44 | % 45 | % Style for (listings') identifiers 46 | identifierstyle={\ttfamily\color{black}}, 47 | % Note : highlighting of Coq identifiers is done through a new 48 | % delimiter definition through an lstset at the begining of the 49 | % document. Don't know how to do better. 50 | % 51 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 52 | % Style for strings 53 | stringstyle=\ttfamily, 54 | % Style for comments 55 | commentstyle={\ttfamily\color{dkgreen}}, 56 | % 57 | %litterate 58 | literate= 59 | {->}{{$\to$\,}}2 60 | {<-}{{$\leftarrow$\,}}2 61 | {<>}{{$\neq$\,}}2 62 | % 63 | }[keywords,comments,strings] 64 | 65 | 66 | \lstnewenvironment{ocaml}{\lstset{language=OCaml}}{} 67 | % pour inliner dans le texte 68 | \def\ocamle{\lstinline[language=OCaml]} 69 | % pour inliner dans les tableaux / displaymath... 70 | \def\ocamlinlines{\lstinline[language=OCaml]} 71 | -------------------------------------------------------------------------------- /talks/annecy-2013/mathpartir.sty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/mathpartir.sty -------------------------------------------------------------------------------- /talks/annecy-2013/phoas.v: -------------------------------------------------------------------------------- 1 | Inductive T : Type := 2 | | Tbool 3 | | Tarrow : T -> T -> T. 4 | 5 | Section t. 6 | 7 | Variable V : T -> Type. 8 | Inductive term : T -> Type := 9 | | Var : forall t, V t -> term t 10 | | Abs : forall a b, (V a -> term b) -> term (Tarrow a b) 11 | | App : forall a b, term (Tarrow a b) -> term a -> term b. 12 | End t. 13 | 14 | Definition Term t := forall V, term V t. 15 | 16 | Arguments Abs {V a b} _. 17 | Arguments Var {V t} _. 18 | Example K a b : Term (Tarrow a (Tarrow b a)) := fun V => Abs (fun x => Abs (fun y => Var x)). -------------------------------------------------------------------------------- /talks/annecy-2013/talk.aux: -------------------------------------------------------------------------------- 1 | \relax 2 | \providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} 3 | \HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined 4 | \global\let\oldcontentsline\contentsline 5 | \gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} 6 | \global\let\oldnewlabel\newlabel 7 | \gdef\newlabel#1#2{\newlabelxx{#1}#2} 8 | \gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} 9 | \AtEndDocument{\ifx\hyper@anchor\@undefined 10 | \let\contentsline\oldcontentsline 11 | \let\newlabel\oldnewlabel 12 | \fi} 13 | \fi} 14 | \global\let\hyper@last\relax 15 | \gdef\HyperFirstAtBeginDocument#1{#1} 16 | \providecommand\HyField@AuxAddToFields[1]{} 17 | \@writefile{toc}{\beamer@endinputifotherversion {3.10pt}} 18 | \@writefile{nav}{\beamer@endinputifotherversion {3.10pt}} 19 | \select@language{english} 20 | \@writefile{toc}{\select@language{english}} 21 | \@writefile{lof}{\select@language{english}} 22 | \@writefile{lot}{\select@language{english}} 23 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}}} 24 | \@writefile{nav}{\headcommand {\beamer@framepages {1}{1}}} 25 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{2}{2/3}{}{0}}} 26 | \@writefile{nav}{\headcommand {\beamer@framepages {2}{3}}} 27 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{3}{4/6}{}{0}}} 28 | \@writefile{nav}{\headcommand {\beamer@framepages {4}{6}}} 29 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{4}{7/11}{}{0}}} 30 | \@writefile{nav}{\headcommand {\beamer@framepages {7}{11}}} 31 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{5}{12/13}{}{0}}} 32 | \@writefile{nav}{\headcommand {\beamer@framepages {12}{13}}} 33 | \@writefile{nav}{\headcommand {\slideentry {0}{0}{6}{14/14}{}{0}}} 34 | \@writefile{nav}{\headcommand {\beamer@framepages {14}{14}}} 35 | \@writefile{toc}{\beamer@sectionintoc {1}{A glimpse of the languages and the compiler}{15}{0}{1}} 36 | \@writefile{nav}{\headcommand {\sectionentry {1}{A glimpse of the languages and the compiler}{15}{A glimpse of the languages and the compiler}{0}}} 37 | \@writefile{nav}{\headcommand {\beamer@sectionpages {1}{14}}} 38 | \@writefile{nav}{\headcommand {\beamer@subsectionpages {1}{14}}} 39 | \@writefile{nav}{\headcommand {\slideentry {1}{0}{7}{15/15}{}{0}}} 40 | \@writefile{nav}{\headcommand {\beamer@framepages {15}{15}}} 41 | \@writefile{nav}{\headcommand {\slideentry {1}{0}{8}{16/16}{}{0}}} 42 | \@writefile{nav}{\headcommand {\beamer@framepages {16}{16}}} 43 | \@writefile{nav}{\headcommand {\slideentry {1}{0}{9}{17/17}{}{0}}} 44 | \@writefile{nav}{\headcommand {\beamer@framepages {17}{17}}} 45 | \@writefile{nav}{\headcommand {\slideentry {1}{0}{10}{18/20}{}{0}}} 46 | \@writefile{nav}{\headcommand {\beamer@framepages {18}{20}}} 47 | \@writefile{nav}{\headcommand {\slideentry {1}{0}{11}{21/22}{}{0}}} 48 | \@writefile{nav}{\headcommand {\beamer@framepages {21}{22}}} 49 | \@writefile{toc}{\beamer@sectionintoc {2}{Examples}{23}{0}{2}} 50 | \@writefile{nav}{\headcommand {\sectionentry {2}{Examples}{23}{Examples}{0}}} 51 | \@writefile{nav}{\headcommand {\beamer@sectionpages {15}{22}}} 52 | \@writefile{nav}{\headcommand {\beamer@subsectionpages {15}{22}}} 53 | \@writefile{nav}{\headcommand {\slideentry {2}{0}{12}{23/23}{}{0}}} 54 | \@writefile{nav}{\headcommand {\beamer@framepages {23}{23}}} 55 | \@writefile{nav}{\headcommand {\slideentry {2}{0}{13}{24/24}{}{0}}} 56 | \@writefile{nav}{\headcommand {\beamer@framepages {24}{24}}} 57 | \@writefile{nav}{\headcommand {\slideentry {2}{0}{14}{25/26}{}{0}}} 58 | \@writefile{nav}{\headcommand {\beamer@framepages {25}{26}}} 59 | \@writefile{nav}{\headcommand {\slideentry {2}{0}{15}{27/28}{}{0}}} 60 | \@writefile{nav}{\headcommand {\beamer@framepages {27}{28}}} 61 | \@writefile{nav}{\headcommand {\slideentry {2}{0}{16}{29/29}{}{0}}} 62 | \@writefile{nav}{\headcommand {\beamer@framepages {29}{29}}} 63 | \@writefile{nav}{\headcommand {\slideentry {2}{0}{17}{30/31}{}{0}}} 64 | \@writefile{nav}{\headcommand {\beamer@framepages {30}{31}}} 65 | \@writefile{nav}{\headcommand {\slideentry {2}{0}{18}{32/32}{}{0}}} 66 | \@writefile{nav}{\headcommand {\beamer@framepages {32}{32}}} 67 | \@writefile{nav}{\headcommand {\slideentry {2}{0}{19}{33/33}{}{0}}} 68 | \@writefile{nav}{\headcommand {\beamer@framepages {33}{33}}} 69 | \@writefile{nav}{\headcommand {\slideentry {2}{0}{20}{34/34}{}{0}}} 70 | \@writefile{nav}{\headcommand {\beamer@framepages {34}{34}}} 71 | \@writefile{toc}{\beamer@sectionintoc {3}{Conclusion}{35}{0}{3}} 72 | \@writefile{nav}{\headcommand {\sectionentry {3}{Conclusion}{35}{Conclusion}{0}}} 73 | \@writefile{nav}{\headcommand {\beamer@sectionpages {23}{34}}} 74 | \@writefile{nav}{\headcommand {\beamer@subsectionpages {23}{34}}} 75 | \@writefile{nav}{\headcommand {\slideentry {3}{0}{21}{35/35}{}{0}}} 76 | \@writefile{nav}{\headcommand {\beamer@framepages {35}{35}}} 77 | \@writefile{nav}{\headcommand {\slideentry {3}{0}{22}{36/39}{}{0}}} 78 | \@writefile{nav}{\headcommand {\beamer@framepages {36}{39}}} 79 | \@writefile{nav}{\headcommand {\slideentry {3}{0}{23}{40/40}{}{0}}} 80 | \@writefile{nav}{\headcommand {\beamer@framepages {40}{40}}} 81 | \@writefile{nav}{\headcommand {\beamer@partpages {1}{40}}} 82 | \@writefile{nav}{\headcommand {\beamer@subsectionpages {35}{40}}} 83 | \@writefile{nav}{\headcommand {\beamer@sectionpages {35}{40}}} 84 | \@writefile{nav}{\headcommand {\beamer@documentpages {40}}} 85 | \@writefile{nav}{\headcommand {\def \inserttotalframenumber {23}}} 86 | -------------------------------------------------------------------------------- /talks/annecy-2013/talk.dvi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/talk.dvi -------------------------------------------------------------------------------- /talks/annecy-2013/talk.nav: -------------------------------------------------------------------------------- 1 | \beamer@endinputifotherversion {3.10pt} 2 | \headcommand {\slideentry {0}{0}{1}{1/1}{}{0}} 3 | \headcommand {\beamer@framepages {1}{1}} 4 | \headcommand {\slideentry {0}{0}{2}{2/3}{}{0}} 5 | \headcommand {\beamer@framepages {2}{3}} 6 | \headcommand {\slideentry {0}{0}{3}{4/6}{}{0}} 7 | \headcommand {\beamer@framepages {4}{6}} 8 | \headcommand {\slideentry {0}{0}{4}{7/11}{}{0}} 9 | \headcommand {\beamer@framepages {7}{11}} 10 | \headcommand {\slideentry {0}{0}{5}{12/13}{}{0}} 11 | \headcommand {\beamer@framepages {12}{13}} 12 | \headcommand {\slideentry {0}{0}{6}{14/14}{}{0}} 13 | \headcommand {\beamer@framepages {14}{14}} 14 | \headcommand {\sectionentry {1}{A glimpse of the languages and the compiler}{15}{A glimpse of the languages and the compiler}{0}} 15 | \headcommand {\beamer@sectionpages {1}{14}} 16 | \headcommand {\beamer@subsectionpages {1}{14}} 17 | \headcommand {\slideentry {1}{0}{7}{15/15}{}{0}} 18 | \headcommand {\beamer@framepages {15}{15}} 19 | \headcommand {\slideentry {1}{0}{8}{16/16}{}{0}} 20 | \headcommand {\beamer@framepages {16}{16}} 21 | \headcommand {\slideentry {1}{0}{9}{17/17}{}{0}} 22 | \headcommand {\beamer@framepages {17}{17}} 23 | \headcommand {\slideentry {1}{0}{10}{18/20}{}{0}} 24 | \headcommand {\beamer@framepages {18}{20}} 25 | \headcommand {\slideentry {1}{0}{11}{21/22}{}{0}} 26 | \headcommand {\beamer@framepages {21}{22}} 27 | \headcommand {\sectionentry {2}{Examples}{23}{Examples}{0}} 28 | \headcommand {\beamer@sectionpages {15}{22}} 29 | \headcommand {\beamer@subsectionpages {15}{22}} 30 | \headcommand {\slideentry {2}{0}{12}{23/23}{}{0}} 31 | \headcommand {\beamer@framepages {23}{23}} 32 | \headcommand {\slideentry {2}{0}{13}{24/24}{}{0}} 33 | \headcommand {\beamer@framepages {24}{24}} 34 | \headcommand {\slideentry {2}{0}{14}{25/26}{}{0}} 35 | \headcommand {\beamer@framepages {25}{26}} 36 | \headcommand {\slideentry {2}{0}{15}{27/28}{}{0}} 37 | \headcommand {\beamer@framepages {27}{28}} 38 | \headcommand {\slideentry {2}{0}{16}{29/29}{}{0}} 39 | \headcommand {\beamer@framepages {29}{29}} 40 | \headcommand {\slideentry {2}{0}{17}{30/31}{}{0}} 41 | \headcommand {\beamer@framepages {30}{31}} 42 | \headcommand {\slideentry {2}{0}{18}{32/32}{}{0}} 43 | \headcommand {\beamer@framepages {32}{32}} 44 | \headcommand {\slideentry {2}{0}{19}{33/33}{}{0}} 45 | \headcommand {\beamer@framepages {33}{33}} 46 | \headcommand {\slideentry {2}{0}{20}{34/34}{}{0}} 47 | \headcommand {\beamer@framepages {34}{34}} 48 | \headcommand {\sectionentry {3}{Conclusion}{35}{Conclusion}{0}} 49 | \headcommand {\beamer@sectionpages {23}{34}} 50 | \headcommand {\beamer@subsectionpages {23}{34}} 51 | \headcommand {\slideentry {3}{0}{21}{35/35}{}{0}} 52 | \headcommand {\beamer@framepages {35}{35}} 53 | \headcommand {\slideentry {3}{0}{22}{36/39}{}{0}} 54 | \headcommand {\beamer@framepages {36}{39}} 55 | \headcommand {\slideentry {3}{0}{23}{40/40}{}{0}} 56 | \headcommand {\beamer@framepages {40}{40}} 57 | \headcommand {\beamer@partpages {1}{40}} 58 | \headcommand {\beamer@subsectionpages {35}{40}} 59 | \headcommand {\beamer@sectionpages {35}{40}} 60 | \headcommand {\beamer@documentpages {40}} 61 | \headcommand {\def \inserttotalframenumber {23}} 62 | -------------------------------------------------------------------------------- /talks/annecy-2013/talk.out: -------------------------------------------------------------------------------- 1 | \BOOKMARK [2][]{Outline0.1}{A glimpse of the languages and the compiler}{}% 1 2 | \BOOKMARK [2][]{Outline0.2}{Examples}{}% 2 3 | \BOOKMARK [2][]{Outline0.3}{Conclusion}{}% 3 4 | -------------------------------------------------------------------------------- /talks/annecy-2013/talk.snm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/annecy-2013/talk.snm -------------------------------------------------------------------------------- /talks/annecy-2013/talk.toc: -------------------------------------------------------------------------------- 1 | \beamer@endinputifotherversion {3.10pt} 2 | \select@language {english} 3 | \beamer@sectionintoc {1}{A glimpse of the languages and the compiler}{15}{0}{1} 4 | \beamer@sectionintoc {2}{Examples}{23}{0}{2} 5 | \beamer@sectionintoc {3}{Conclusion}{35}{0}{3} 6 | -------------------------------------------------------------------------------- /talks/annecy-2013/talk.vrb: -------------------------------------------------------------------------------- 1 | \frametitle {Some remarks} 2 | \begin{itemize} 3 | 4 | \item Stepping back 5 | \begin{itemize} 6 | \item Bluespec started as an HDL deeply embedded in Haskell 7 | \item Lava [1998] is another HDL deeply embedded in Haskell 8 | \item \fesi{} is ``just'' another HDL, deeply embedded in \alert{Coq} 9 | \pause 10 | \begin{itemize} 11 | \item semantics (i.e., interpreter), compiler and programs are \alert{integrated seamlessly} 12 | \item dependent types capture some interesting properties in 13 | hardware 14 | \item use of extraction to dump compiled programs 15 | \end{itemize} 16 | \end{itemize} 17 | 18 | \pause 19 | 20 | \item Future work 21 | \begin{itemize} 22 | \item Improve on the language (FIFOs, references). 23 | \item Make the compiler more realistic (automatic scheduling of 24 | atomic actions). 25 | \item Embed a DSL for floating-point cores? 26 | \end{itemize} 27 | 28 | \pause 29 | 30 | \item Take-away message 31 | \begin{itemize} 32 | \item Coq can be used as an embedding language for DSLs! 33 | \end{itemize} 34 | 35 | \end{itemize} 36 | -------------------------------------------------------------------------------- /talks/cav-2013/Makefile: -------------------------------------------------------------------------------- 1 | FIGS=$(wildcard *.fig) 2 | FIGSPDF=$(FIGS:.fig=.pdf) 3 | 4 | talk.pdf: $(FIGSPDF) talk.tex 5 | pdflatex talk 6 | pdflatex talk 7 | 8 | clean: 9 | # rm -f `cat .cvsignore` 10 | rm -f $(FIGSPDF) talk.out talk.nav talk.snm talk.toc talk.vrb talk.log talk.aux talk.pdf 11 | rm -f *.log 12 | rm -rf auto 13 | 14 | 15 | figs: $(FIGSPDF) 16 | 17 | %.pdf: %.fig 18 | fig2dev -L pdf $< $@ 19 | 20 | -------------------------------------------------------------------------------- /talks/cav-2013/figs/DC.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/DC.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/DC1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/DC1.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/DC_1.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/DC_1.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/DC_1.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/DC_1.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/cav-2013/figs/DC_1.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/DC_1.graffle/image2.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/DC_1.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/DC_1.graffle/image3.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/DC_1.graffle/image4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/DC_1.graffle/image4.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/_mlpost.aux: -------------------------------------------------------------------------------- 1 | \relax 2 | -------------------------------------------------------------------------------- /talks/cav-2013/figs/_mlpost.log: -------------------------------------------------------------------------------- 1 | This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) (format=pdflatex 2013.2.4) 12 JUL 2013 15:20 2 | entering extended mode 3 | restricted \write18 enabled. 4 | %&-line parsing enabled. 5 | **_mlpost.tex 6 | (./_mlpost.tex 7 | LaTeX2e <2011/06/27> 8 | Babel and hyphenation patterns for english, dumylang, nohyphenation, lo 9 | aded. 10 | (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls 11 | Document Class: article 2007/10/19 v1.4h Standard LaTeX document class 12 | (/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo 13 | File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option) 14 | ) 15 | \c@part=\count79 16 | \c@section=\count80 17 | \c@subsection=\count81 18 | \c@subsubsection=\count82 19 | \c@paragraph=\count83 20 | \c@subparagraph=\count84 21 | \c@figure=\count85 22 | \c@table=\count86 23 | \abovecaptionskip=\skip41 24 | \belowcaptionskip=\skip42 25 | \bibindent=\dimen102 26 | ) 27 | (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty 28 | Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) 29 | 30 | (/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty 31 | Package: keyval 1999/03/16 v1.13 key=value parser (DPC) 32 | \KV@toks@=\toks14 33 | ) 34 | (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty 35 | Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) 36 | 37 | (/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty 38 | Package: trig 1999/03/16 v1.09 sin cos tan (DPC) 39 | ) 40 | (/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg 41 | File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live 42 | ) 43 | Package graphics Info: Driver file: pdftex.def on input line 91. 44 | 45 | (/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def 46 | File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX 47 | 48 | (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty 49 | Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) 50 | ) 51 | (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty 52 | Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) 53 | ) 54 | \Gread@gobject=\count87 55 | )) 56 | \Gin@req@height=\dimen103 57 | \Gin@req@width=\dimen104 58 | ) 59 | No file _mlpost.aux. 60 | \openout1 = `_mlpost.aux'. 61 | 62 | LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 1. 63 | LaTeX Font Info: ... okay on input line 1. 64 | LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 1. 65 | LaTeX Font Info: ... okay on input line 1. 66 | LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 1. 67 | LaTeX Font Info: ... okay on input line 1. 68 | LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 1. 69 | LaTeX Font Info: ... okay on input line 1. 70 | LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 1. 71 | LaTeX Font Info: ... okay on input line 1. 72 | LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 1. 73 | LaTeX Font Info: ... okay on input line 1. 74 | (/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii 75 | [Loading MPS to PDF converter (version 2006.09.02).] 76 | \scratchcounter=\count88 77 | \scratchdimen=\dimen105 78 | \scratchbox=\box26 79 | \nofMPsegments=\count89 80 | \nofMParguments=\count90 81 | \everyMPshowfont=\toks15 82 | \MPscratchCnt=\count91 83 | \MPscratchDim=\dimen106 84 | \MPnumerator=\count92 85 | \makeMPintoPDFobject=\count93 86 | \everyMPtoPDFconversion=\toks16 87 | ) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty 88 | Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO 89 | ) 90 | 91 | (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty 92 | Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) 93 | Package ifluatex Info: LuaTeX not detected. 94 | ) 95 | (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty 96 | Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) 97 | Package ifpdf Info: pdfTeX in PDF mode is detected. 98 | ) 99 | Package pdftexcmds Info: LuaTeX not detected. 100 | Package pdftexcmds Info: \pdf@primitive is available. 101 | Package pdftexcmds Info: \pdf@ifprimitive is available. 102 | Package pdftexcmds Info: \pdfdraftmode found. 103 | ) 104 | (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty 105 | Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf 106 | 107 | (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty 108 | Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) 109 | 110 | (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty 111 | Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) 112 | )) 113 | (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty 114 | Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) 115 | 116 | (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty 117 | Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) 118 | 119 | (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty 120 | Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) 121 | Package etexcmds Info: Could not find \expanded. 122 | (etexcmds) That can mean that you are not using pdfTeX 1.50 or 123 | (etexcmds) that some package has redefined \expanded. 124 | (etexcmds) In the latter case, load this package earlier. 125 | ))) 126 | Package grfext Info: Graphics extension search list: 127 | (grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE 128 | G,.JBIG2,.JB2,.eps] 129 | (grfext) \AppendGraphicsExtensions on input line 452. 130 | 131 | (/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg 132 | File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv 133 | e 134 | )) 135 | File: file_a.mps Graphic file (type mps) 136 | 137 | [MP to PDF] (./file_a.mps) 138 | File: file_b.mps Graphic file (type mps) 139 | [MP to PDF] (./file_b.mps) [1 140 | 141 | {/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./_mlpost.aux) ) 142 | Here is how much of TeX's memory you used: 143 | 1495 strings out of 495059 144 | 21108 string characters out of 3182031 145 | 72243 words of memory out of 3000000 146 | 4694 multiletter control sequences out of 15000+200000 147 | 3808 words of font info for 15 fonts, out of 3000000 for 9000 148 | 14 hyphenation exceptions out of 8191 149 | 37i,5n,23p,288b,310s stack positions out of 5000i,500n,10000p,200000b,50000s 150 | 153 | Output written on _mlpost.pdf (1 page, 17921 bytes). 154 | PDF statistics: 155 | 16 PDF objects out of 1000 (max. 8388607) 156 | 10 compressed objects within 1 object stream 157 | 0 named destinations out of 1000 (max. 500000) 158 | 1 words of extra memory for PDF output out of 10000 (max. 10000000) 159 | 160 | -------------------------------------------------------------------------------- /talks/cav-2013/figs/_mlpost.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/_mlpost.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/_mlpost.tex: -------------------------------------------------------------------------------- 1 | \documentclass[a4paper]{article}\usepackage{graphicx}\begin{document} 2 | \begin{center} 3 | \hrulefill\verb!file_a!\hrulefill\\[1em] 4 | \includegraphics{file_a.mps}\\ 5 | \hrulefill\\ 6 | 7 | \medskip 8 | \hrulefill\verb!file_b!\hrulefill\\[1em] 9 | \includegraphics{file_b.mps}\\ 10 | \hrulefill\\ 11 | 12 | \medskip 13 | \end{center} 14 | \end{document} 15 | -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-1.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-1.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-1.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-1.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-1.graffle/image5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-1.graffle/image5.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-1.graffle/image6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-1.graffle/image6.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-1.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-2.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-2.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-2.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-2.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-2.graffle/image10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-2.graffle/image10.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-2.graffle/image12.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-2.graffle/image12.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-2.graffle/image13.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-2.graffle/image13.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/adder-2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/adder-2.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/analogy-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/analogy-1.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/analogy-2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/analogy-2.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/analogy-3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/analogy-3.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/analogy-4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/analogy-4.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/bitonic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/bitonic1.png -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-0.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-0.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-0.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-0.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-0.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-0.graffle/image2.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-0.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-0.graffle/image3.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-0.graffle/image4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-0.graffle/image4.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-0.graffle/image6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-0.graffle/image6.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-0.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-0.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-1.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-1.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-1.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-1.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-1.graffle/image10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-1.graffle/image10.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-1.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-1.graffle/image2.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-1.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-1.graffle/image3.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-1.graffle/image6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-1.graffle/image6.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-1.graffle/image7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-1.graffle/image7.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-1.graffle/image8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-1.graffle/image8.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-1.graffle/image9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-1.graffle/image9.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-1.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-2.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-2.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-2.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-2.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-2.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-2.graffle/image2.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-2.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-2.graffle/image3.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-2.graffle/image4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-2.graffle/image4.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compil-2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compil-2.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/compilation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/compilation.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/coq-workshop.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/coq-workshop.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/examples.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/examples.pdf -------------------------------------------------------------------------------- /talks/cav-2013/figs/figs.cmi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/figs.cmi -------------------------------------------------------------------------------- /talks/cav-2013/figs/figs.ml: -------------------------------------------------------------------------------- 1 | open Mlpost 2 | open Point 3 | open Path 4 | 5 | module PieChart = 6 | struct 7 | 8 | let pi = atan 1. 9 | 10 | let line a b = pathp ~style:jLine [a;b] 11 | 12 | let (--) = line 13 | 14 | let arc ?(r=Num.one) c b e = 15 | let arc = fullcircle in 16 | let b = scale (Num.of_float 2.) (origin -- (dir b)) in 17 | let e = scale (Num.of_float 2.) (origin -- (dir e)) in 18 | shift c (scale (Num.multf 2. r) (cut_before b (cut_after e arc))) 19 | 20 | 21 | 22 | let slice color r b e = 23 | let pb = Point.scale r (dir b) in 24 | let pe = Point.scale r (dir e) in 25 | let path = [origin -- pb; origin -- pe; arc ~r origin b e] in 26 | let cycle =(build_cycle path) in 27 | let pen = Pen.scale (Num.bp 0.5) Pen.circle in 28 | Command.seq [(* fill ~color cycle; *) draw ~pen cycle] 29 | 30 | let piechart r l = 31 | let rec make acc a = 32 | function [] -> acc 33 | | (n,c,p)::q -> let alpha = p in 34 | let acc = Command.append (slice c r a (a +. alpha)) acc in 35 | make acc (a +. alpha) q 36 | in make Command.nop 0. l 37 | end 38 | 39 | let chart = ["", Color.white, 40.; 40 | "", Color.white, 50.; 41 | ] 42 | 43 | (* let () = Metapost.emit "file_a" ( PieChart.slice Color.red (Num.cm 1.) 0. (40.)) *) 44 | let () = Cairo.emit_png "file_b" ( PieChart.slice Color.red (Num.cm 1.) 40. (50.)) 45 | (* let () = Metapost.emit "file_b" (PieChart.piechart (Num.cm 1.) chart) *) 46 | -------------------------------------------------------------------------------- /talks/cav-2013/figs/file_a.mps: -------------------------------------------------------------------------------- 1 | %!PS 2 | %%BoundingBox: -1 -1 29 19 3 | %%HiResBoundingBox: -0.25 -0.25 28.59645 18.47044 4 | %%Creator: MetaPost 1.504 5 | %%CreationDate: 2013.07.12:1520 6 | %%Pages: 1 7 | %%BeginProlog 8 | %%EndProlog 9 | %%Page: 1 1 10 | 1 0 0 setrgbcolor 11 | newpath 28.34608 0 moveto 12 | 0 0 lineto 13 | 0 0 lineto 14 | 21.71428 18.22043 lineto 15 | 21.71442 18.22041 lineto 16 | 25.98059 13.1357 28.34639 6.6904 28.34645 0.00032 curveto 17 | closepath fill 18 | 0 0 0 setrgbcolor 0 0.5 dtransform truncate idtransform setlinewidth pop 19 | [] 0 setdash 1 setlinejoin 10 setmiterlimit 20 | newpath 28.34608 0 moveto 21 | 0 0 lineto 22 | 0 0 lineto 23 | 21.71428 18.22043 lineto 24 | 21.71442 18.22041 lineto 25 | 25.98059 13.1357 28.34639 6.6904 28.34645 0.00032 curveto 26 | closepath stroke 27 | showpage 28 | %%EOF 29 | -------------------------------------------------------------------------------- /talks/cav-2013/figs/file_b.mps: -------------------------------------------------------------------------------- 1 | %!PS 2 | %%BoundingBox: -1 -1 29 19 3 | %%HiResBoundingBox: -0.25 -0.25 28.59645 18.47044 4 | %%Creator: MetaPost 1.504 5 | %%CreationDate: 2013.07.12:1520 6 | %%Pages: 1 7 | %%BeginProlog 8 | %%EndProlog 9 | %%Page: 1 1 10 | 1 1 1 setrgbcolor 11 | newpath 28.34608 0 moveto 12 | 0 0 lineto 13 | 0 0 lineto 14 | 21.71428 18.22043 lineto 15 | 21.71442 18.22041 lineto 16 | 25.98059 13.1357 28.34639 6.6904 28.34645 0.00032 curveto 17 | closepath fill 18 | 0 0 0 setrgbcolor 0 0.5 dtransform truncate idtransform setlinewidth pop 19 | [] 0 setdash 1 setlinejoin 10 setmiterlimit 20 | newpath 28.34608 0 moveto 21 | 0 0 lineto 22 | 0 0 lineto 23 | 21.71428 18.22043 lineto 24 | 21.71442 18.22041 lineto 25 | 25.98059 13.1357 28.34639 6.6904 28.34645 0.00032 curveto 26 | closepath stroke 27 | showpage 28 | %%EOF 29 | -------------------------------------------------------------------------------- /talks/cav-2013/figs/rtl.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/figs/rtl.pdf -------------------------------------------------------------------------------- /talks/cav-2013/lstcoq.sty: -------------------------------------------------------------------------------- 1 | %======================================================================= 2 | % Définit le style ssr Gallina pour les listings (Assia Mahboubi 2007) 3 | \lstdefinelanguage{Coq}{ 4 | % 5 | % Anything betweeen $ becomes LaTeX math mode 6 | mathescape=true, 7 | % 8 | % Comments may or not include Latex commands 9 | texcl=false, 10 | % 11 | % 12 | % Vernacular commands 13 | morekeywords=[1]{ 14 | Section, Module, End, Require, Import, Export, 15 | Variable, Variables, Parameter, Parameters, Axiom, Hypothesis, Hypotheses, 16 | Notation, Local, Tactic, Reserved, Scope, Open, Close, Bind, Delimit, 17 | Definition, Let, Ltac, Fixpoint, CoFixpoint, Add, Morphism, Relation, 18 | Implicit, Arguments, Set, Unset, Contextual, Strict, Prenex, Implicits, 19 | Inductive, CoInductive, Record, Structure, Canonical, Coercion, 20 | Context, Class, Global, Instance, Program, Infix, 21 | Theorem, Lemma, Corollary, Proposition, Fact, Remark, Example, 22 | Proof, Goal, Save, Qed, Defined, Hint, Resolve, Rewrite, View, 23 | Search, Show, Print, Printing, All, Graph, Projections, inside, outside}, 24 | % 25 | % Gallina 26 | morekeywords=[2]{forall, exists, exists2, fun, fix, cofix, struct, 27 | match, with, end, as, in, return, let, if, is, then, else, 28 | for, of, nosimpl, when}, 29 | % 30 | % Sorts 31 | morekeywords=[3]{Type, Prop, Set}, 32 | % 33 | % Various tactics, some are std Coq subsumed by ssr, for the manual purpose 34 | morekeywords=[4]{ 35 | pose, set, move, case, elim, apply, clear, 36 | hnf, intro, intros, generalize, rename, pattern, after, 37 | destruct, induction, using, refine, inversion, injection, 38 | rewrite, congr, unlock, compute, ring, field, fourier, 39 | replace, fold, unfold, change, cutrewrite, simpl, 40 | have, suff, wlog, suffices, without, loss, nat_norm, 41 | assert, cut, trivial, revert, bool_congr, nat_congr, 42 | symmetry, transitivity, auto, split, autorewrite}, 43 | % symmetry, transitivity, auto, split, left, right, autorewrite}, 44 | % 45 | % Terminators 46 | morekeywords=[5]{ 47 | by, done, exact, reflexivity, tauto, romega, omega, 48 | assumption, solve, contradiction, discriminate}, 49 | % 50 | % Control 51 | morekeywords=[6]{do, last, first, try, idtac, repeat}, 52 | % 53 | % Various symbols 54 | % For the ssr manual we turn off the prettyprint of formulas 55 | % literate= 56 | % {->}{{$\rightarrow\,$}}2 57 | % {->}{{\tt ->}}3 58 | % {<-}{{$\leftarrow\,$}}2 59 | % {<-}{{\tt <-}}2 60 | % {>->}{{$\mapsto$}}3 61 | % {<=}{{$\leq$}}1 62 | % {>=}{{$\geq$}}1 63 | % {<>}{{$\neq$}}1 64 | % {/\\}{{$\wedge$}}2 65 | % {\\/}{{$\vee$}}2 66 | % {<->}{{$\leftrightarrow\;$}}3 67 | % {<=>}{{$\Leftrightarrow\;$}}3 68 | % {:nat}{{$~\in\mathbb{N}$}}3 69 | % {fforall\ }{{$\forall_f\,$}}1 70 | % {forall\ }{{$\forall\,$}}1 71 | % {exists\ }{{$\exists\,$}}1 72 | % {negb}{{$\neg$}}1 73 | % {spp}{{:*:\,}}1 74 | % {~}{{$\sim$}}1 75 | % {\\in}{{$\in\;$}}1 76 | % {/\\}{$\land\,$}1 77 | % {:*:}{{$*$}}2 78 | % {=>}{{$\,\Rightarrow\ $}}1 79 | % {=>}{{\tt =>}}2 80 | % {:=}{{{\tt:=}\,\,}}2 81 | % {==}{{$\equiv$}\,}2 82 | % {!=}{{$\neq$}\,}2 83 | % {^-1}{{$^{-1}$}}1 84 | % {elt'}{elt'}1 85 | % {=}{{\tt=}\,\,}2 86 | % {+}{{\tt+}\,\,}2, 87 | % 88 | % Comments delimiters, we do turn this off for the manual 89 | morecomment=[s]{(**}{**)}, 90 | % 91 | % Spaces are not displayed as a special character 92 | showstringspaces=false, 93 | % 94 | % String delimiters 95 | morestring=[b]", 96 | morestring=[d]’, 97 | % 98 | % Size of tabulations 99 | tabsize=3, 100 | % 101 | % Enables ASCII chars 128 to 255 102 | extendedchars=false, 103 | % 104 | % Case sensitivity 105 | sensitive=true, 106 | % 107 | % Automatic breaking of long lines 108 | breaklines=true, 109 | % 110 | % Default style fors listings 111 | basicstyle=\small, 112 | % 113 | % Position of captions is bottom 114 | captionpos=b, 115 | % 116 | % Full flexible columns 117 | columns=[l]fullflexible, 118 | keepspaces=true, 119 | % 120 | % Style for (listings') identifiers 121 | identifierstyle={\ttfamily\color{black}}, 122 | % Note : highlighting of Coq identifiers is done through a new 123 | % delimiter definition through an lstset at the begining of the 124 | % document. Don't know how to do better. 125 | % 126 | % Style for declaration keywords 127 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 128 | % Style for gallina keywords 129 | keywordstyle=[2]{\ttfamily\color{dkgreen}}, 130 | % Style for sorts keywords 131 | keywordstyle=[3]{\ttfamily\color{ltblue}}, 132 | % Style for tactics keywords 133 | keywordstyle=[4]{\ttfamily\color{dkblue}}, 134 | % Style for terminators keywords 135 | keywordstyle=[5]{\ttfamily\color{dkred}}, 136 | %Style for iterators 137 | %keywordstyle=[6]{\ttfamily\color{dkpink}}, 138 | % Style for strings 139 | stringstyle=\ttfamily, 140 | % Style for comments 141 | commentstyle={\ttfamily\color{dkgreen}}, 142 | % 143 | % 144 | moredelim=**[is][\ttfamily\color{red}]{/&}{&/}, 145 | %litterate 146 | literate= 147 | {\\equiv}{{$\leftrightarrow\,$}}3 148 | {==>}{{$\Rightarrow$}}1 149 | {=>}{{$\Rightarrow$}}1 150 | {>->}{{$\rightarrowtail$}}2 151 | {->}{{$\rightarrow\,$}}2 152 | {<-}{{$\leftarrow\,$}}2 153 | {++}{{$\cup$}}1 154 | {<==}{{$\subseteq$}}1 155 | {|-}{{\quad$\vdash$\quad}}1 156 | {forall}{{$\forall$}}1 157 | {exists}{{$\exists$}}1 158 | {=o=}{{$\circeq$}}1 159 | {\\fun}{{$\lambda$}}1 160 | {|>}{{$\rhd$}}1 161 | {\\oplus}{{$\oplus$}}1 162 | {\\tab}{{\quad}}1 163 | {\\_}{{ }}1 164 | {||}{{$\vee$}}1 165 | {\&\&}{{$\wedge$}}1 166 | {\\bool}{{$\mathbb{B}$}}1 167 | {\\data}{{$\mathbb{T}$}}1 168 | {\\times}{{$\times$}}1 169 | {\\xorb}{{$\otimes$}}1 170 | {\\andb}{{$\wedge$}}1 171 | }[keywords,strings] 172 | 173 | \lstnewenvironment{coq}{\lstset{language=Coq}}{} 174 | \lstnewenvironment{scoq}{\lstset{language=Coq,basicstyle=\scriptsize}}{} 175 | % pour inliner dans le texte 176 | \def\coqinline{\lstinline[language=Coq, basicstyle=\normalsize]} 177 | % pour inliner dans les tableaux / displaymath... 178 | \def\coqinlines{\lstinline[language=Coq]} 179 | \def\coqe{\lstinline[language=Coq, basicstyle=\small]} 180 | -------------------------------------------------------------------------------- /talks/cav-2013/lstocaml.sty: -------------------------------------------------------------------------------- 1 | \lstdefinelanguage{OCaml}{ 2 | % Anything betweeen $ becomes LaTeX math mode 3 | mathescape=true, 4 | % 5 | % Comments may or not include Latex commands 6 | texcl=false, 7 | % 8 | % Vernacular commands 9 | morekeywords=[1]{and, as, assert, begin, class, constraint, do, done, downto, else, end, exception, external, false, for, fun, function, functor, if, in, include, inherit, initializer, lazy, let, match, method, module, mutable, new, object, of, open, or, private, rec, sig, struct, then, to, true, try, type, val, virtual, when, while, with}, 10 | % 11 | % 12 | % Comments delimiters, we do turn this off for the manual 13 | comment=[s]{(*}{*)}, 14 | % 15 | %keepspaces 16 | keepspaces=true, 17 | % Spaces are not displayed as a special character 18 | showstringspaces=false, 19 | % 20 | % String delimiters 21 | morestring=[b]", 22 | morestring=[d]’, 23 | % 24 | % Size of tabulations 25 | tabsize=3, 26 | % 27 | % Enables ASCII chars 128 to 255 28 | extendedchars=false, 29 | % 30 | % Case sensitivity 31 | sensitive=true, 32 | % 33 | % Automatic breaking of long lines 34 | breaklines=true, 35 | % 36 | % Default style fors listings 37 | basicstyle={\normalsize}, 38 | % 39 | % Position of captions is bottom 40 | captionpos=b, 41 | % 42 | % Full flexible columns 43 | columns=[l]fullflexible, 44 | % 45 | % Style for (listings') identifiers 46 | identifierstyle={\ttfamily\color{black}}, 47 | % Note : highlighting of Coq identifiers is done through a new 48 | % delimiter definition through an lstset at the begining of the 49 | % document. Don't know how to do better. 50 | % 51 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 52 | % Style for strings 53 | stringstyle=\ttfamily, 54 | % Style for comments 55 | commentstyle={\ttfamily\color{dkgreen}}, 56 | % 57 | %litterate 58 | literate= 59 | {->}{{$\to$\,}}2 60 | {<-}{{$\leftarrow$\,}}2 61 | {<>}{{$\neq$\,}}2 62 | % 63 | }[keywords,comments,strings] 64 | 65 | 66 | \lstnewenvironment{ocaml}{\lstset{language=OCaml}}{} 67 | % pour inliner dans le texte 68 | \def\ocamle{\lstinline[language=OCaml]} 69 | % pour inliner dans les tableaux / displaymath... 70 | \def\ocamlinlines{\lstinline[language=OCaml]} 71 | -------------------------------------------------------------------------------- /talks/cav-2013/mathpartir.sty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/mathpartir.sty -------------------------------------------------------------------------------- /talks/cav-2013/talk.dvi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/cav-2013/talk.dvi -------------------------------------------------------------------------------- /talks/cav-2013/talk.pdfpc: -------------------------------------------------------------------------------- 1 | [file] 2 | talk.pdf 3 | [end_user_slide] 4 | 1 5 | [notes] 6 | ### 1 7 | ### 2 8 | Metaprogramming: the act of writing programs that manipulate programs 9 | 10 | e.g., macros in Lisp or templates in C++ 11 | ### 5 12 | This is an adder, defined by recursion 13 | 14 | The idea is that if you know how to build an adder of size n, you can build an adder of size 2n by performing addition in parallel over the LL bits of the inputs a and b and the HL bits of a and b 15 | 16 | 17 | 18 | ### 9 19 | this is a circuit generator 20 | 21 | the properties that we prove on the circuit generators are transported on the generated RTL 22 | -------------------------------------------------------------------------------- /talks/coq-2012/Makefile: -------------------------------------------------------------------------------- 1 | FIGS=$(wildcard *.fig) 2 | FIGSPDF=$(FIGS:.fig=.pdf) 3 | 4 | talk.pdf: $(FIGSPDF) talk.tex 5 | pdflatex talk 6 | pdflatex talk 7 | 8 | clean: 9 | # rm -f `cat .cvsignore` 10 | rm -f $(FIGSPDF) talk.out talk.nav talk.snm talk.toc talk.vrb talk.log talk.aux talk.pdf 11 | rm -f *.log 12 | rm -rf auto 13 | 14 | 15 | figs: $(FIGSPDF) 16 | 17 | %.pdf: %.fig 18 | fig2dev -L pdf $< $@ 19 | 20 | -------------------------------------------------------------------------------- /talks/coq-2012/figs/DC.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/figs/DC.pdf -------------------------------------------------------------------------------- /talks/coq-2012/figs/DC1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/figs/DC1.pdf -------------------------------------------------------------------------------- /talks/coq-2012/figs/DC_1.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/figs/DC_1.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/coq-2012/figs/DC_1.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/figs/DC_1.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/coq-2012/figs/DC_1.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/figs/DC_1.graffle/image2.pdf -------------------------------------------------------------------------------- /talks/coq-2012/figs/DC_1.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/figs/DC_1.graffle/image3.pdf -------------------------------------------------------------------------------- /talks/coq-2012/figs/DC_1.graffle/image4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/figs/DC_1.graffle/image4.pdf -------------------------------------------------------------------------------- /talks/coq-2012/figs/compilation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/figs/compilation.pdf -------------------------------------------------------------------------------- /talks/coq-2012/figs/coq-workshop.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/figs/coq-workshop.pdf -------------------------------------------------------------------------------- /talks/coq-2012/figs/rtl.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/figs/rtl.pdf -------------------------------------------------------------------------------- /talks/coq-2012/lstcoq.sty: -------------------------------------------------------------------------------- 1 | %======================================================================= 2 | % Définit le style ssr Gallina pour les listings (Assia Mahboubi 2007) 3 | \lstdefinelanguage{Coq}{ 4 | % 5 | % Anything betweeen $ becomes LaTeX math mode 6 | mathescape=true, 7 | % 8 | % Comments may or not include Latex commands 9 | texcl=false, 10 | % 11 | % 12 | % Vernacular commands 13 | morekeywords=[1]{ 14 | Section, Module, End, Require, Import, Export, 15 | Variable, Variables, Parameter, Parameters, Axiom, Hypothesis, Hypotheses, 16 | Notation, Local, Tactic, Reserved, Scope, Open, Close, Bind, Delimit, 17 | Definition, Let, Ltac, Fixpoint, CoFixpoint, Add, Morphism, Relation, 18 | Implicit, Arguments, Set, Unset, Contextual, Strict, Prenex, Implicits, 19 | Inductive, CoInductive, Record, Structure, Canonical, Coercion, 20 | Context, Class, Global, Instance, Program, Infix, 21 | Theorem, Lemma, Corollary, Proposition, Fact, Remark, Example, 22 | Proof, Goal, Save, Qed, Defined, Hint, Resolve, Rewrite, View, 23 | Search, Show, Print, Printing, All, Graph, Projections, inside, outside}, 24 | % 25 | % Gallina 26 | morekeywords=[2]{forall, exists, exists2, fun, fix, cofix, struct, 27 | match, with, end, as, in, return, let, if, is, then, else, 28 | for, of, nosimpl, when}, 29 | % 30 | % Sorts 31 | morekeywords=[3]{Type, Prop, Set}, 32 | % 33 | % Various tactics, some are std Coq subsumed by ssr, for the manual purpose 34 | morekeywords=[4]{ 35 | pose, set, move, case, elim, apply, clear, 36 | hnf, intro, intros, generalize, rename, pattern, after, 37 | destruct, induction, using, refine, inversion, injection, 38 | rewrite, congr, unlock, compute, ring, field, fourier, 39 | replace, fold, unfold, change, cutrewrite, simpl, 40 | have, suff, wlog, suffices, without, loss, nat_norm, 41 | assert, cut, trivial, revert, bool_congr, nat_congr, 42 | symmetry, transitivity, auto, split, autorewrite}, 43 | % symmetry, transitivity, auto, split, left, right, autorewrite}, 44 | % 45 | % Terminators 46 | morekeywords=[5]{ 47 | by, done, exact, reflexivity, tauto, romega, omega, 48 | assumption, solve, contradiction, discriminate}, 49 | % 50 | % Control 51 | morekeywords=[6]{do, last, first, try, idtac, repeat}, 52 | % 53 | % Various symbols 54 | % For the ssr manual we turn off the prettyprint of formulas 55 | % literate= 56 | % {->}{{$\rightarrow\,$}}2 57 | % {->}{{\tt ->}}3 58 | % {<-}{{$\leftarrow\,$}}2 59 | % {<-}{{\tt <-}}2 60 | % {>->}{{$\mapsto$}}3 61 | % {<=}{{$\leq$}}1 62 | % {>=}{{$\geq$}}1 63 | % {<>}{{$\neq$}}1 64 | % {/\\}{{$\wedge$}}2 65 | % {\\/}{{$\vee$}}2 66 | % {<->}{{$\leftrightarrow\;$}}3 67 | % {<=>}{{$\Leftrightarrow\;$}}3 68 | % {:nat}{{$~\in\mathbb{N}$}}3 69 | % {fforall\ }{{$\forall_f\,$}}1 70 | % {forall\ }{{$\forall\,$}}1 71 | % {exists\ }{{$\exists\,$}}1 72 | % {negb}{{$\neg$}}1 73 | % {spp}{{:*:\,}}1 74 | % {~}{{$\sim$}}1 75 | % {\\in}{{$\in\;$}}1 76 | % {/\\}{$\land\,$}1 77 | % {:*:}{{$*$}}2 78 | % {=>}{{$\,\Rightarrow\ $}}1 79 | % {=>}{{\tt =>}}2 80 | % {:=}{{{\tt:=}\,\,}}2 81 | % {==}{{$\equiv$}\,}2 82 | % {!=}{{$\neq$}\,}2 83 | % {^-1}{{$^{-1}$}}1 84 | % {elt'}{elt'}1 85 | % {=}{{\tt=}\,\,}2 86 | % {+}{{\tt+}\,\,}2, 87 | % 88 | % Comments delimiters, we do turn this off for the manual 89 | morecomment=[s]{(**}{**)}, 90 | % 91 | % Spaces are not displayed as a special character 92 | showstringspaces=false, 93 | % 94 | % String delimiters 95 | morestring=[b]", 96 | morestring=[d]’, 97 | % 98 | % Size of tabulations 99 | tabsize=3, 100 | % 101 | % Enables ASCII chars 128 to 255 102 | extendedchars=false, 103 | % 104 | % Case sensitivity 105 | sensitive=true, 106 | % 107 | % Automatic breaking of long lines 108 | breaklines=true, 109 | % 110 | % Default style fors listings 111 | basicstyle=\small, 112 | % 113 | % Position of captions is bottom 114 | captionpos=b, 115 | % 116 | % Full flexible columns 117 | columns=[l]fullflexible, 118 | keepspaces=true, 119 | % 120 | % Style for (listings') identifiers 121 | identifierstyle={\ttfamily\color{black}}, 122 | % Note : highlighting of Coq identifiers is done through a new 123 | % delimiter definition through an lstset at the begining of the 124 | % document. Don't know how to do better. 125 | % 126 | % Style for declaration keywords 127 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 128 | % Style for gallina keywords 129 | keywordstyle=[2]{\ttfamily\color{dkgreen}}, 130 | % Style for sorts keywords 131 | keywordstyle=[3]{\ttfamily\color{ltblue}}, 132 | % Style for tactics keywords 133 | keywordstyle=[4]{\ttfamily\color{dkblue}}, 134 | % Style for terminators keywords 135 | keywordstyle=[5]{\ttfamily\color{dkred}}, 136 | %Style for iterators 137 | %keywordstyle=[6]{\ttfamily\color{dkpink}}, 138 | % Style for strings 139 | stringstyle=\ttfamily, 140 | % Style for comments 141 | commentstyle={\ttfamily\color{dkgreen}}, 142 | % 143 | % 144 | moredelim=**[is][\ttfamily\color{red}]{/&}{&/}, 145 | %litterate 146 | literate= 147 | {\\equiv}{{$\leftrightarrow\,$}}3 148 | {==>}{{$\Rightarrow$}}1 149 | {=>}{{$\Rightarrow$}}1 150 | {>->}{{$\rightarrowtail$}}2 151 | {->}{{$\rightarrow\,$}}2 152 | {<-}{{$\leftarrow\,$}}2 153 | {++}{{$\cup$}}1 154 | {<==}{{$\subseteq$}}1 155 | {|-}{{\quad$\vdash$\quad}}1 156 | {forall}{{$\forall$}}1 157 | {exists}{{$\exists$}}1 158 | {=o=}{{$\circeq$}}1 159 | {\\fun}{{$\lambda$}}1 160 | {|>}{{$\rhd$}}1 161 | {\\oplus}{{$\oplus$}}1 162 | {\\tab}{{\quad}}1 163 | {\\_}{{ }}1 164 | {||}{{$\vee$}}1 165 | {\&\&}{{$\wedge$}}1 166 | {\\bool}{{$\mathbb{B}$}}1 167 | {\\data}{{$\mathbb{T}$}}1 168 | {\\times}{{$\times$}}1 169 | {\\xorb}{{$\otimes$}}1 170 | {\\andb}{{$\wedge$}}1 171 | }[keywords,strings] 172 | 173 | \lstnewenvironment{coq}{\lstset{language=Coq}}{} 174 | \lstnewenvironment{scoq}{\lstset{language=Coq,basicstyle=\scriptsize}}{} 175 | % pour inliner dans le texte 176 | \def\coqinline{\lstinline[language=Coq, basicstyle=\normalsize]} 177 | % pour inliner dans les tableaux / displaymath... 178 | \def\coqinlines{\lstinline[language=Coq]} 179 | \def\coqe{\lstinline[language=Coq, basicstyle=\small]} 180 | -------------------------------------------------------------------------------- /talks/coq-2012/lstocaml.sty: -------------------------------------------------------------------------------- 1 | \lstdefinelanguage{OCaml}{ 2 | % Anything betweeen $ becomes LaTeX math mode 3 | mathescape=true, 4 | % 5 | % Comments may or not include Latex commands 6 | texcl=false, 7 | % 8 | % Vernacular commands 9 | morekeywords=[1]{and, as, assert, begin, class, constraint, do, done, downto, else, end, exception, external, false, for, fun, function, functor, if, in, include, inherit, initializer, lazy, let, match, method, module, mutable, new, object, of, open, or, private, rec, sig, struct, then, to, true, try, type, val, virtual, when, while, with}, 10 | % 11 | % 12 | % Comments delimiters, we do turn this off for the manual 13 | comment=[s]{(*}{*)}, 14 | % 15 | %keepspaces 16 | keepspaces=true, 17 | % Spaces are not displayed as a special character 18 | showstringspaces=false, 19 | % 20 | % String delimiters 21 | morestring=[b]", 22 | morestring=[d]’, 23 | % 24 | % Size of tabulations 25 | tabsize=3, 26 | % 27 | % Enables ASCII chars 128 to 255 28 | extendedchars=false, 29 | % 30 | % Case sensitivity 31 | sensitive=true, 32 | % 33 | % Automatic breaking of long lines 34 | breaklines=true, 35 | % 36 | % Default style fors listings 37 | basicstyle={\normalsize}, 38 | % 39 | % Position of captions is bottom 40 | captionpos=b, 41 | % 42 | % Full flexible columns 43 | columns=[l]fullflexible, 44 | % 45 | % Style for (listings') identifiers 46 | identifierstyle={\ttfamily\color{black}}, 47 | % Note : highlighting of Coq identifiers is done through a new 48 | % delimiter definition through an lstset at the begining of the 49 | % document. Don't know how to do better. 50 | % 51 | keywordstyle=[1]{\ttfamily\color{dkviolet}}, 52 | % Style for strings 53 | stringstyle=\ttfamily, 54 | % Style for comments 55 | commentstyle={\ttfamily\color{dkgreen}}, 56 | % 57 | %litterate 58 | literate= 59 | {->}{{$\to$\,}}2 60 | {<-}{{$\leftarrow$\,}}2 61 | {<>}{{$\neq$\,}}2 62 | % 63 | }[keywords,comments,strings] 64 | 65 | 66 | \lstnewenvironment{ocaml}{\lstset{language=OCaml}}{} 67 | % pour inliner dans le texte 68 | \def\ocamle{\lstinline[language=OCaml]} 69 | % pour inliner dans les tableaux / displaymath... 70 | \def\ocamlinlines{\lstinline[language=OCaml]} 71 | -------------------------------------------------------------------------------- /talks/coq-2012/mathpartir.sty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/mathpartir.sty -------------------------------------------------------------------------------- /talks/coq-2012/phoas.v: -------------------------------------------------------------------------------- 1 | Inductive T : Type := 2 | | Tbool 3 | | Tarrow : T -> T -> T. 4 | 5 | Section t. 6 | 7 | Variable V : T -> Type. 8 | Inductive term : T -> Type := 9 | | Var : forall t, V t -> term t 10 | | Abs : forall a b, (V a -> term b) -> term (Tarrow a b) 11 | | App : forall a b, term (Tarrow a b) -> term a -> term b. 12 | End t. 13 | 14 | Definition Term t := forall V, term V t. 15 | 16 | Arguments Abs {V a b} _. 17 | Arguments Var {V t} _. 18 | Example K a b : Term (Tarrow a (Tarrow b a)) := fun V => Abs (fun x => Abs (fun y => Var x)). -------------------------------------------------------------------------------- /talks/coq-2012/talk.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/coq-2012/talk.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/DC.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/DC.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/DC1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/DC1.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/DC_1.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/DC_1.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/DC_1.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/DC_1.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/DC_1.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/DC_1.graffle/image2.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/DC_1.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/DC_1.graffle/image3.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/DC_1.graffle/image4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/DC_1.graffle/image4.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-1.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-1.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-1.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-1.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-1.graffle/image5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-1.graffle/image5.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-1.graffle/image6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-1.graffle/image6.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-1.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-2.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-2.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-2.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-2.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-2.graffle/image10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-2.graffle/image10.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-2.graffle/image12.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-2.graffle/image12.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-2.graffle/image13.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-2.graffle/image13.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/adder-2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/adder-2.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/analogy-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/analogy-1.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/analogy-2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/analogy-2.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/analogy-3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/analogy-3.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/analogy-4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/analogy-4.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/bitonic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/bitonic1.png -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-0.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-0.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-0.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-0.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-0.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-0.graffle/image2.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-0.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-0.graffle/image3.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-0.graffle/image4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-0.graffle/image4.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-0.graffle/image6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-0.graffle/image6.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-0.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-0.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-1.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-1.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-1.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-1.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-1.graffle/image10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-1.graffle/image10.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-1.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-1.graffle/image2.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-1.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-1.graffle/image3.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-1.graffle/image6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-1.graffle/image6.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-1.graffle/image7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-1.graffle/image7.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-1.graffle/image8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-1.graffle/image8.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-1.graffle/image9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-1.graffle/image9.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-1.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-2.graffle/QuickLook/Preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-2.graffle/QuickLook/Preview.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-2.graffle/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-2.graffle/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-2.graffle/image2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-2.graffle/image2.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-2.graffle/image3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-2.graffle/image3.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-2.graffle/image4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-2.graffle/image4.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compil-2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compil-2.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/compilation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/compilation.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/coq-workshop.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/coq-workshop.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/examples.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/examples.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/figs/rtl.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/figs/rtl.pdf -------------------------------------------------------------------------------- /talks/grenoble-2013/talk.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/braibant/Synthesis/922982aaddb8a7a16101ff304c45d24a6265dc2e/talks/grenoble-2013/talk.pdf --------------------------------------------------------------------------------