-let trans_atom ~neg = function
+let trans_atom = function
| Ast.True | Ast.False | Ast.Predicate _ | Ast.Proposition _ -> assert false
- | Ast.Eq _ when neg -> assert false
- | Ast.Eq (a,b) -> Ast.Function ("==",[Ast.Constant "_"; a; b])
- | Ast.NotEq (a,b) when neg -> Ast.Function ("==",[Ast.Constant "_"; a; b])
- | Ast.NotEq _ -> assert false
+ | Ast.Eq (a,b) -> true, Ast.Function ("==",[Ast.Constant "_"; a; b])
+ | Ast.NotEq (a,b) -> false, Ast.Function ("==",[Ast.Constant "_"; a; b])
;;
-let trans_formulae ~neg = function
+let trans_formulae = function
| Ast.Disjunction _ -> assert false
- | Ast.Atom a -> trans_atom ~neg a
+ | Ast.Atom a -> trans_atom a
| Ast.NegAtom _ -> assert false
;;
let rec aux p n = function
| [] -> p,n
| Ast.Comment _ :: tl -> aux p n tl
- | Ast.AnnotatedFormula (name, (Ast.Axiom | Ast.Hypothesis), f,_,_) :: tl->
- aux (p@[Ast.Constant name,trans_formulae ~neg:false f]) n tl
- | Ast.AnnotatedFormula (name, Ast.Negated_conjecture, f,_,_) :: tl ->
- assert (n = []);
- aux p (n@[Ast.Constant name, trans_formulae ~neg:true f]) tl
+ | Ast.AnnotatedFormula (name,
+ (Ast.Axiom | Ast.Hypothesis|Ast.Negated_conjecture), f,_,_) :: tl->
+ let is_positive, f = trans_formulae f in
+ if is_positive then aux (p@[Ast.Constant name,f]) n tl
+ else aux p (n@[Ast.Constant name,f]) tl
| _ -> prerr_endline "bad syntax"; assert false
in
aux [] [] statements