diff --git a/lib/ast.ml b/lib/ast.ml
index 55a5ca2c657d6fbe5a34fa8674713692c50544cb..25549ae100cac09829cd759722fdb049d409c956 100644
--- a/lib/ast.ml
+++ b/lib/ast.ml
@@ -12,8 +12,6 @@ type binop =
   | Inf 
   | Equal
   | Diff
-  | Impli
-  | Equiv
 
 (*tail::head au lieu de head::tail pour éviter les empilements inutiles
    (((vide,x),y),z)  
@@ -214,13 +212,11 @@ let rec string_of_expression (e : expr) : string =
                       | Inf   -> "("^string_of_expression(x) ^ " < " ^string_of_expression(y)^")" 
                       | Equal -> string_of_expression(x) ^ " == " ^string_of_expression(y)
                       | Diff  -> string_of_expression(x) ^ " != " ^string_of_expression(y)
-                      | Impli -> string_of_expression(x) ^ "->" ^string_of_expression(y)
-                      | Equiv -> string_of_expression(x) ^ " <-> " ^string_of_expression(y)
                       )
   | Not b -> "!("^string_of_expression b^")" 
   | Var v ->  v
   | Cond(c,e1,e2) -> "if (" ^string_of_expression c ^ ") then \n {" ^ string_of_expression e1 ^ "} \n else {" ^ string_of_expression e2 ^ "}"
-  | Affectation(v,e) ->  v ^ " prend la valeur " ^ string_of_expression e
+  | Affectation(v,e) ->  v ^ " = " ^ string_of_expression e
   | Set s -> string_of_set s string_of_expression 
   | Let (v,e1,e2) -> "Let  " ^ v ^ " = " ^ string_of_expression e1 ^ " in \n(" ^string_of_expression e2 ^")"
   | Fun (s,e) -> "Function  " ^ s ^ " = (" ^ string_of_expression e ^")"
@@ -341,7 +337,7 @@ let png_from_graph g name dir =
   let oc = open_out (dir^"/"^name^"_measure.dot") in
   Printf.fprintf oc "%s\n" dot;
   close_out oc;
-  ignore (Sys.command ("dot -Tpng ./generate/"^name^"_measure.dot -o "^dir^"/"^ name^"_measure.png"))
+  ignore (Sys.command ("dot -Tpng "^dir^"/"^name^"_measure.dot -o "^dir^"/"^ name^"_measure.png"))
 
 (**[assign_heigth g] returns the phase, phase weight association list. The phase weight is deduced from the order
                      topology of the phase
@@ -362,19 +358,19 @@ let assign_height (g : G.t) : (expr * int) list =
 
 module NodeMap = Map.Make(Node)
 
-(** [update_lowlink v w lowlink] met à jour la valeur de lowlink pour le noeud [v] en fonction du noeud [w]. *)
+(** [update_lowlink v w lowlink] updates the lowlink value for node [v] based on node [w].*)
 let update_lowlink v w lowlink =
   let v_lowlink = NodeMap.find v lowlink in
   let w_lowlink = NodeMap.find w lowlink in
   NodeMap.add v (min v_lowlink w_lowlink) lowlink
 
-(** [update_on_stack w on_stack] supprime le noeud [w] de la liste [on_stack]. *)
+(** [update_on_stack w on_stack] remove node [w] from list [on_stack]. *)
   let update_on_stack w on_stack =
     List.filter (fun v -> v <>  w) on_stack
 
   
-(** [pop_stack v stack on_stack scc] retire les éléments de la pile jusqu'à atteindre le noeud [v]. 
-    Cela met à jour [on_stack] en supprimant les noeuds retirés de la pile, et [scc] en ajoutant ces noeuds à la nouvelle composante fortement connexe.*)   
+(** [pop_stack v stack on_stack scc] removes elements from the [stack] until reaching node [v]. 
+    This updates [on_stack] by removing nodes removed from the [stack], and [scc] by adding these nodes to the new strongly connected component.*)   
      let rec pop_stack v stack on_stack scc =
       match stack with
       | w :: rest -> if w <> v then pop_stack v rest (update_on_stack w on_stack) (w :: scc)
@@ -382,9 +378,9 @@ let update_lowlink v w lowlink =
       | [] -> raise(Failure "Error: stack empty")
     
 
-(** [strongconnect v index stack indices lowlink on_stack sccs g] est la fonction qui effectue le parcours en profondeur pour trouver les composantes fortement connexes. 
-    Pour chaque successeur [w] de [v] dans le graphe [g], si [w] n'est pas encore visité, il est récursivement visité.
-    Après avoir visité tous les successeurs, si [v] est une racine de SCC, tous les noeuds dans la pile jusqu'à [v] sont ajoutés à une nouvelle SCC. 
+(** [strongconnect v index stack indices lowlink on_stack sccs g] is the function that performs the dfs to find strongly connected components. 
+    For each successor [w] of [v] in graph [g], if [w] is not yet visited, it is recursively visited.
+    After visiting all successors, if [v] is a root of SCC, all nodes in the stack up to [v] are added to a new SCC.. 
     *)
 let rec strongconnect (g : G.t) (v:expr) (index:int) stack indices lowlink on_stack sccs =
   let indices = NodeMap.add v index indices in
@@ -417,8 +413,8 @@ let rec strongconnect (g : G.t) (v:expr) (index:int) stack indices lowlink on_st
     else
       index, stack, indices, lowlink, on_stack, sccs
   
-(** [tarjan g] est la fonction principale qui initialise les structures de données et lance le parcours en profondeur. 
-                et renvoie la liste des composants fortements connexes*)
+(** [tarjan g]  is the main function that initializes the data structures and initiates dfs . 
+                and returns the list of strongly related components *)
 let tarjan g =
      (*Tarjan : *)
       let _, _, _, _, _, sccs =
@@ -441,7 +437,7 @@ let tarjan g =
 
   module G2 = Graph.Imperative.Digraph.ConcreteLabeled(SCC)(Edge) 
 
-  (**[string_of_expr_list expr_list] retourne une chaine de caractere à partir d'une liste d'expression tel que [[X;Y]] correspondant à : string_of_expression X, string_of_expression Y, .... *)
+  (**[string_of_expr_list expr_list] returns a character string from a list of expressions such as [[X;Y]] corresponding to: string_of_expression X, string_of_expression Y, .... *)
 let string_of_expr_list expr_list =
   let string_list = List.map string_of_expression expr_list in
   String.concat ", " string_list    
@@ -460,17 +456,17 @@ let png_from_graph2 (g:G2.t) (name : string) (dir : string) :unit =
   let oc = open_out (dir^"/"^name^"_measure.dot") in
   Printf.fprintf oc "%s\n" dot;
   close_out oc;
-  ignore (Sys.command ("dot -Tpng ./generate/"^name^"_measure.dot -o "^dir^"/"^ name^"_measure.png"))
+  ignore (Sys.command ("dot -Tpng "^dir^"/"^name^"_measure.dot -o "^dir^"/"^ name^"_measure.png"))
   
 
-(** [scc_graph g]  retourne le graphe G2.t correspondant au graphe de composants fortement connexe du graphe [g]
-                  en recupérant la liste des composants fortement connexe et en les ajoutant au graphe G2.t créé[scc_graph].
-                  Ensuite, la fonction itère sur chaque SCC et ajoute des arêtes entre les SCC en se basant sur le graphe original [g]. 
-                  Pour chaque sommet dans un SCC, elle itère sur ses successeurs et trouve le SCC auquel chaque successeur appartient. 
-                  Si le SCC du sommet et le SCC du successeur sont différents, une arête est ajoutée entre les SCC correspondants dans [scc_graph].
+(** [scc_graph g] returns the graph G2.t corresponding to the strongly connected component graph of graph [g]
+                  by retrieving the list of strongly connected components and adding them to the created G2.t graph[scc_graph].
+                  Then the function iterates over each SCC and adds edges between the SCCs based on the original graph [g]. 
+                  For each vertex in an SCC, it iterates over its successors and finds the SCC to which each successor belongs. 
+                  If the vertex SCC and the successor SCC are different, an edge is added between the corresponding SCCs in [scc_graph].
 
     @param g [G.t]
-    @return [scc_graph] de type [G2.t], le graphe des composants fortement connexe de [g]  *)
+    @return [scc_graph] of type [G2.t], the strongly connected component graph of [g] *)
 let scc_graph g =
   let scc_list = tarjan g in
   let scc_graph = G2.create () in
diff --git a/lib/gencoq.ml b/lib/gencoq.ml
index c1ffcf930e92561475cf2608ddeedd25740b2c70..e20b77f4fdf30c04457ceb587f294f94b2800e2b 100644
--- a/lib/gencoq.ml
+++ b/lib/gencoq.ml
@@ -100,8 +100,6 @@ let rec expr_to_coq (r : expr) : Formula.t =
                           | Inf   -> Infix(expr_to_coq x,"<",expr_to_coq y) 
                           | Equal -> Infix(expr_to_coq x,"==",expr_to_coq y) 
                           | Diff  -> Infix(expr_to_coq x,"!=",expr_to_coq y) 
-                          | Impli  -> Infix(expr_to_coq x, "->", expr_to_coq y) 
-                          | Equiv  -> Infix(expr_to_coq x,"<->",expr_to_coq y) 
                           )
       | Cons (e1,e2) -> App(Raw("cons"), ([expr_to_coq e1;expr_to_coq e2]))
       | Fun (s,e) -> Fun(Some s, expr_to_coq e)
@@ -470,38 +468,10 @@ let generate_lt (t:string * Formula.t * stmt list -> stmt) : stmt list =
 
 
   let generate_module_proof (m: measure)(s:string) (gmpp:stmt list) (gdp : stmt list)  =
-   
     ModuleImpType(s^"_proof",s^"_type", RawCoq(["Import World.";"Variable da : demonic_action."])::generate_measure_all m  (fun (a,b,c) -> Lemma(a, b, c)) gmpp gdp
     @newline::generate_lt (fun (a,b,c) -> Lemma(a, b, c)))::[]
  
 
-    (** [read_and_save_after_keyword filename keyword] is a function that reads the contents of a file specified by [filename] and returns all the lines that appear after the first occurrence of [keyword].
-      The function opens the file, reads its contents line by line, and stores them in a list. It then searches for the first occurrence of [keyword] in the lines and returns all the lines that appear after it. 
-      If [keyword] is not found, an empty list is returned.
-      @param filename is the path to the file to be read.
-      @param keyword is the string to search for in the file.
-    *)
-    let read_and_save_after_keyword filename keyword =
-      let in_channel = open_in filename in
-      let rec loop lines =
-        try
-          let line = input_line in_channel in
-          loop (line :: lines)
-        with End_of_file ->
-          close_in in_channel;
-          List.rev lines
-      in
-      let lines = loop [] in
-      let rec find_keyword lines =
-        match lines with
-        | [] -> []
-        | line :: rest -> try  ignore (Str.search_forward (Str.regexp keyword) line 0);  rest
-                          with Not_found ->  find_keyword rest
-      in
-      String.concat "\n" (find_keyword lines)
-
-
-
 (** [write_coq_file gen filename] writes the generated Coq code to the specified file.  
   @param gen stmt list representing the generated Coq code.
   @param filename The name of the file to write the generated code to.
@@ -513,34 +483,6 @@ let write_coq_file (gen: stmt list) (filename : string) =
   close_out file_out;
   print_endline(filename^ " has been generated");;
 
-
-(*
-(**[generate_coq d s] generates the coq file containing the world description module, the type module and the proof module
-    @param description of
-    @param string s
-    @return[unit] *)
-let generate_coq (Description(d,r,Measure g) : description) (name : string)=
-  if Ast.check_description (Description(d,r,Measure g)) 
-  then
-      let gmpptype, gmpp_proof = generate_measure_per_phase g in
-      let gdp_type, gdp_proof = generate_definition_phase g in
-      Ast.png_from_graph g name ;
-      Ast.png_from_graph2 (Ast.scc_graph g;) (name^"_scc_graph");
-      let file_exists =
-      Sys.file_exists ("./generate/"^name^".v") in
-                  (* if file exist we save the proof part, else we generate the proof part*)
-      let proof = if file_exists then 
-                      [RawCoq([read_and_save_after_keyword  ("./generate/"^name^".v") ("End "^name^"_type.")])]
-                  else newline::generate_module_proof (Measure g) name gmpp_proof gdp_proof
-      in
-      let module_world_type = (generate_requires d)@Module("World",(generate_instances d)@newline::generate_robogram r d)
-                              :: generate_module_type (Measure g) name gmpptype gdp_type in
-      write_coq_file (module_world_type@proof) ("./generate/"^name^"world_type.v");
-
-
-  else 
-     () 
-*)
 (**[generate_filename base n dir] 
     @param base : string, base file name
     @param  n : integer, number of file iterations
diff --git a/lib/lexer.mll b/lib/lexer.mll
index f96a35cc951416a2c5d7affe62528de5a0b28a51..be04b7a5e38b59ac293851759505765ae63a5b30 100644
--- a/lib/lexer.mll
+++ b/lib/lexer.mll
@@ -80,8 +80,6 @@ rule token = parse
     | "|"               { PIPE}
     | "end"             { END}
     | "->"              { ARROW}
-    | "=>"              { IMPLICATION}
-    | "<=>"             { EQUIVALENCE}
     | "let"             { LET}
     | "="               { AFFECT}
     | "in"              { IN}
diff --git a/lib/parser.mly b/lib/parser.mly
index 9a4ae99fa26c279fd3170fc87bff80229a1f2971..1250f87c956355f086360eaef388045eeb2f42fb 100644
--- a/lib/parser.mly
+++ b/lib/parser.mly
@@ -29,7 +29,6 @@
 %token <string> VARIABLE 
 %token <string> KEYWORD
 %token IF THEN ELSE MATCH WITH PIPE ARROW END
-%token IMPLICATION EQUIVALENCE 
 %token LET AFFECT IN FUN
 %token PLUS MINUS MULT DIV AND OR NOT
 %token SUP INF EQUAL DIFF
@@ -216,7 +215,6 @@ robogram:
     | expression * {$1}
 
 expression:
-    /*(e)*/
     | e = constant {e}
     /*if e1 then e2 else e3*/
     | IF e1 = expression THEN e2 = expression  ELSE e3 = expression {Cond(e1,e2,e3)}  %prec AFFECT
@@ -271,7 +269,7 @@ set :
     | {Vide}
 
 %inline binop :
-    | PLUS {(*Format.eprintf "PLUS ";*) Plus}
+    | PLUS {Plus}
     | MINUS {Minus}
     | MULT {Mult}
     | DIV {Div} 
@@ -307,17 +305,8 @@ edge_list :
 
 
 sommet :
-    | p = prop {p}
+    | p = phase {p}
 
-prop :
-    | PARENOPEN prop propop prop PARENCLOSE {BinOp($2,$3,$4)} 
-    | NOT prop {Not $2}
+phase :
     | VARIABLE {Var $1}
     | KEYWORD {Var $1}
-    | PARENOPEN f = appfunc PARENCLOSE {f}  
-
-propop :
-    | AND {And}
-    | OR {Or}
-    | IMPLICATION {Impli}
-    | EQUIVALENCE {Equiv}
\ No newline at end of file