$55.5.0+dev0-2025-04-28/'Diffing$DefsF$leftA;@@@A@@@@@7../../utils/diffing.mli | ~ | @@@@'Diffing@@A@%rightB;@@ A@@@@@ @   @  @@@@ A@A@"eqC;@@A@@@@@A  A  @@@@B@A@$diffD;@@A@@@@@D  D  @@@@C@A@%stateE;@@'A@@@@@&G  'G  @@@@%D@A@@@*~ e e+I & )@)E@@+change_kindG;@@(Deletion@@9N  :N  @@8G@)Insertion@@BO  CO  @@AH@,Modification@@KP  LP  @@JI@,Preservation@@TQ  UQ  @@SJ@@@A@@@@@XM  @@A@VF@A@&prefixZ*Format_doc'printer@#int@@@렠@'Diffing+change_kind@@@@@@@@@}R  ~R  @@|K@@%style@'Diffing+change_kind@@@$list$Misc%Style%style@@@ ;@@@ =@@ >@S  S  =@@L@@&changeH;$left@ C%right@ D"eq@ E$diff@ F@D&DeleteI@ G@@W g iW g z@@N@&Insert#I@ I@@X { }X { @@O@$Keep4I@ K2I@ M0I@ O@@Y  Y  @@P@&ChangeFI@ QDI@ S=I@ U@@Z  Z  @@Q@@@A@YYYY@@@@@@@@V @ @ @@@@M@A@(classify@'Diffing&change@@ e@@ f@@ g@@ h@@@ m'Diffing+change_kind@@@ n@@ o@)\  *\  @@(R@@ӱ&DefineI@!DJD&changeK;@@@A'Diffing&change!D$left@@@ p!D%right@@@ q!D"eq@@@ r!D$diff@@@ s@@@ x@@@@lfmf4@@@@kT@@@%patchL;@@vA'Diffing&Define&change@@@ @@@ @@@@g57g5O@@@@U@A@*ParametersN-update_resultM;@@A@@@@@kk@@@@V@A@&weight@'Diffing&Define&change@@@ ?@@@ @@ @mm@@W@@$test@!D%state@@@ @!D$left@@@ @!D%right@@@ &Stdlib&result!D"eq@@@ !D$diff@@@ @@@ @@ @@ @@ @q>Bq>w@@X@@&update@'Diffing&Define&change@@@ @!D%state@@@ 'Diffing&Define*Parameters-update_result@@@ @@ @@ @ww%@@Y@@@@ j!|@Z@@!SO$diff@!D%state@@@ @%array!D$left@@@ @@@ @!D%right@@@ @@@ 'Diffing&Define%patch@@@ @@ @@ @@ @ef%@@d[@@@@i~j@h\@@ӱ&SimpleP@@@B@@@ A@@@ @@ @@@@@\%state@@@ @$left@@@ @%right@@@ &Stdlib&result"eq@@@ "$diff@@@ @@@ @@ @@ @@ @1@@@@@@ @4%state@@@ 9%state@@@ @@ @@ @G@@@@@^@@@ӱ-Left_variadicR@@?@d@@@ 7c@@@ 6@@ 5@@@5@4@a`@@@ 4@g_@@@ 3@m^@@@ 2]ZuY@@@ 0zX@@@ 1@@@ /@@ .@@ -@@ ,@'@@@W@@@ +@V@@@ *@%state@@@ '@J$left@@@ )@@@ (@@ &@@ %@@ $@L@@@ @3}4@2`@@@ӱ.Right_variadicT@@@@@@ z@@@ y@@ x@KL1@@@@@@@ w@@@@ v@@@@ u@@@ s@@@ t@@@ r@@ q@@ p@@ o@'@~@}@@@@ n@@@@ m@%state@@@ j@f%right@@@ l@@@ k@@ i@@ h@@ g@K@w@@r@7@b@@@@@b9<@c@@@@32Parametric diffing@ _ This module implements diffing over lists of arbitrary content. It is parameterized by).@ = We provide the following guarantee: Given two lists !l% and !r V, if different patches result in different states, we say that the state diverges. 2We always return the optimal patch on prefixes of !l% and !r ' on which state does not diverge.@ Otherwise, we return a correct but non-optimal patch where subpatches with no divergent states are optimal for the given initial state.@@ More precisely, the optimality of Wagner-Fischer depends on the property that the edit-distance between a k-prefix of the left input and a l-prefix of the right input d(k,l) satisfies@ n d(k,l) = min ( del_cost + d(k-1,l), insert_cost + d(k,l-1), change_cost + d(k-1,l-1) )@  Under this hypothesis, it is optimal to choose greedily the state of the minimal patch transforming the left k-prefix into the right l-prefix as a representative of the states of all possible patches transforming the left k-prefix into the right l-prefix.@  If this property is not satisfied, we can still choose greedily a representative state. However, the computed patch is no more guaranteed to be globally optimal. Nevertheless, it is still a correct patch, which is even optimal among all explored patches.@@@@@@@@@@@@A򐠑,Diffing.Defs3 *The core types of a diffing implementation@@@@@@@@@@@@A#1Diffing.Defs.left@@@A@@@@#2Diffing.Defs.right@@@A@@@@#/Diffing.Defs.eq37Detailed equality trace@@@@@@@@@@@@@@A@@@@#1Diffing.Defs.diff39Detailed difference trace@@@@@@@@@@@@@@A@@  @@#2Diffing.Defs.state3>environment of a partial patch@@@@@@@@@@@@@@A@@@@@@@#3Diffing.change_kind3 YThe kind of changes which is used to share printing and styling across implementation@@@@@@@@@@@@@@@@ @@@@@@@@@@A@@@@.Diffing.prefix@@@@@ݠ-Diffing.style@@ @@@@à#.Diffing.change@YYYY@@@@@@@@@@@@@@A@@@@0Diffing.classify@@.@@@@h/.Diffing.Definec3,Define(Defs) 9 creates the diffing types from the types defined in $Defs X and the functors that need to be instantatied with the diffing algorithm parameters@@@@@@@@@@@@Ap'Diffing$Defs$Defs@#5Diffing.Define.change3 (The type of potential changes on a list.@@@@@@@@@@@@@@A}@SR@@#4Diffing.Define.patch3 &A patch is an ordered list of changes.@@@@@@@@@@@@@@AV@HG@@9Diffing.Define.Parameters@DAҐ# 'Diffing.Define.Parameters.update_result@@@A@@FE@@ Diffing.Define.Parameters.weight3)weight ch " returns the weight of the change "ch *. Used to find the smallest patch.@@@@@@@@@@@@Q@R@@@@E>Diffing.Define.Parameters.test3-test st xl xr7 tests if the elements "xl% and "xr; are co mpatible ("Ok*) or not (%Error").@@@@@@@@@@@@a@b@[@T@@@@4 Diffing.Define.Parameters.update3,update ch st = returns the new state after applying a change. The -update_result = type also contains expansions in the variadic case.@@@@@@@@@@@@>@?@6@@@@$@@"!@0Diffing.Define.S@AF5Diffing.Define.S.diff3.diff state l r $ computes the optimal patch between !l% and !r ", using the initial state %state!.@@@@@@@@@@@@9@ :@3@%@@@@@@  @/5Diffing.Define.Simple @Ay!* +Parameters with type update_result := state@>@ @@@@@@/