(***********************************************************************) (* v * The Coq Proof Assistant / The Coq Development Team *) (* RApp (dloc, RRef(dloc,glob_Ropp), [r_of_posint dloc n]) | POS n -> r_of_posint dloc n (**********************************************************************) (* Printing R via scopes *) (**********************************************************************) exception Non_closed_number (* for numbers > 1 *) let rec bignat_of_pos = function (* 1+1 *) | RApp (_,RRef (_,p), [RRef (_,o1); RRef (_,o2)]) when p = glob_Rplus & o1 = glob_R1 & o2 = glob_R1 -> two (* 1+1+1 *) | RApp (_,RRef (_,p1), [RRef (_,o1); RApp(_,RRef (_,p2),[RRef(_,o2);RRef(_,o3)])]) when p1 = glob_Rplus & p2 = glob_Rplus & o1 = glob_R1 & o2 = glob_R1 & o3 = glob_R1 -> three (* (1+1)*b *) | RApp (_,RRef (_,p), [a; b]) when p = glob_Rmult -> if bignat_of_pos a <> two then raise Non_closed_number; mult_2 (bignat_of_pos b) (* 1+(1+1)*b *) | RApp (_,RRef (_,p1), [RRef (_,o); RApp (_,RRef (_,p2),[a;b])]) when p1 = glob_Rplus & p2 = glob_Rmult & o = glob_R1 -> if bignat_of_pos a <> two then raise Non_closed_number; add_1 (mult_2 (bignat_of_pos b)) | _ -> raise Non_closed_number let bignat_of_r = function | RRef (_,a) when a = glob_R0 -> zero | RRef (_,a) when a = glob_R1 -> one | r -> bignat_of_pos r let bigint_of_r = function | RApp (_,RRef (_,o), [a]) when o = glob_Ropp -> NEG (bignat_of_r a) | a -> POS (bignat_of_r a) let uninterp_r p = try Some (bigint_of_r p) with Non_closed_number -> None let _ = Symbols.declare_numeral_interpreter "R_scope" ["Coq";"Reals";"Rsyntax"] (r_of_int,None) ([RRef(dummy_loc,glob_Ropp);RRef(dummy_loc,glob_R0); RRef(dummy_loc,glob_Rplus);RRef(dummy_loc,glob_Rmult);RRef(dummy_loc,glob_R1)], uninterp_r, None)