package universo
A tool for Dedukti to play with universes
Install
Dune Dependency
Authors
Maintainers
Sources
v2.7.tar.gz
sha512=97171b48dd96043d84587581d72edb442f63e7b5ac1695771aa1c3c9074739e15bc7d17678fedb7062acbf403a0bf323d97485c31b92376b80c63b5c2300ee3c
sha256=5e1b6a859dfa1eb2098947a99c7d11ee450f750d96da1720f4834e1505d1096c
doc/src/universo.common/constraints.ml.html
Source file constraints.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
module B = Kernel.Basic module F = Files module R = Kernel.Rule module S = Kernel.Signature module T = Kernel.Term module U = Universes module M = Api.Meta type t = {file : F.cout F.t; meta : M.cfg} type print_cstrs = { eqvar : (B.name * B.name) list; axiom : (U.univ * U.univ) list; cumul : (U.univ * U.univ) list; rule : (U.univ * U.univ * U.univ) list; } let dummy_name = R.Gamma (false, B.mk_name (B.mk_mident "dummy") (B.mk_ident "dummy")) let mk_rule vl vr = let pat = R.Pattern (B.dloc, vl, []) in let rhs = T.mk_Const B.dloc vr in R.{ctx = []; pat; rhs; name = dummy_name} let print_rule pp fmt (l, r) = Format.fprintf fmt "@.[] %a --> %a" pp l pp r let print_eq_var fmt (l, r) = Format.fprintf fmt "%a.@." (print_rule Api.Pp.Default.print_name) (l, r) let print_predicate fmt p = let l' = U.term_of_pred p in let r' = U.true_ () in Format.fprintf fmt "%a.@." (print_rule Api.Pp.Default.print_term) (l', r') (** [mk_var_cstre env f l r] add the constraint [l =?= r]. Call f on l and r such that l >= r. *) let mk_var_cstr f l r = (* FIXME: is it really necessary to compare number and not the full string ? *) let get_number s = int_of_string (String.sub s 1 (String.length s - 1)) in let il = B.string_of_ident @@ B.id l in let ir = B.string_of_ident @@ B.id r in let nl = get_number il in let nr = get_number ir in if nl = 0 && nr = 0 then if r < l then (f l r; (l, r)) else (f r l; (r, l)) else if nr < nl then (f l r; (l, r)) else (f r l; (r, l)) let deps = ref [] let mk_cstr env f cstr = let fmt = F.fmt_of_file env.file in match cstr with | U.Pred p -> Format.fprintf fmt "%a@." print_predicate p; true | U.EqVar (l, r) -> let l, r = mk_var_cstr f l r in (* FIXME: explain the rationale. *) Api.Meta.add_rules env.meta [mk_rule l r]; if not (List.mem (B.md r) !deps) then deps := B.md r :: !deps; Format.fprintf fmt "%a@." print_eq_var (l, r); true let get_deps () = !deps let flush () = deps := []
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>