@@ -291,6 +291,54 @@ ASSUME(ReplaceFirstSubSeq("\r", "%%", "Properly escape the %% char") = "Properly
291291ASSUME ReplaceFirstSubSeq ( "\\ \\ " , "\\ " , "Properly escape the \\ quotes" ) = "Properly escape the \\ \\ quotes"
292292ASSUME ReplaceFirstSubSeq ( "replaces" , "%pattern%" , "This %pattern% the pattern" ) = "This replaces the pattern"
293293
294+ ReplaceFirstSubSeqPure ( r , s , t ) ==
295+ (* *************************************************************************)
296+ (* The sequence t with its subsequence s replaced by the sequence r *)
297+ (************************************************************************* *)
298+ IF s \in SubSeqs ( t )
299+ THEN ReplaceSubSeqAt ( IndexFirstSubSeq ( s , t ) , r , s , t )
300+ ELSE t
301+
302+ ASSUME ReplaceFirstSubSeqPure ( << >> , << >> , << >> ) = << >>
303+ ASSUME ReplaceFirstSubSeqPure ( << 4 >> , << >> , << >> ) = << 4 >>
304+ ASSUME ReplaceFirstSubSeqPure ( << 4 >> , << 4 >> , << >> ) = << >>
305+ ASSUME ReplaceFirstSubSeqPure ( << >> , << >> , << 3 , 2 , 3 , 4 >> ) = << 3 , 2 , 3 , 4 >>
306+ ASSUME ReplaceFirstSubSeqPure ( << 4 , 4 >> , << 3 , 2 , 3 , 4 >> , << 3 , 2 , 3 , 4 >> ) = << 4 , 4 >>
307+ ASSUME ReplaceFirstSubSeqPure ( << 4 , 4 >> , << >> , << 3 , 2 , 3 , 4 >> ) = << 4 , 4 , 3 , 2 , 3 , 4 >>
308+
309+ ASSUME ReplaceFirstSubSeqPure ( << 4 , 4 >> , << 4 >> , << 3 , 2 , 3 , 4 >> ) = << 3 , 2 , 3 , 4 , 4 >>
310+ ASSUME ReplaceFirstSubSeqPure ( << >> , << 4 >> , << 3 , 2 , 3 , 4 >> ) = << 3 , 2 , 3 >>
311+ ASSUME ReplaceFirstSubSeqPure ( << >> , << 4 >> , << 3 , 2 , 3 , 4 , 4 >> ) = << 3 , 2 , 3 , 4 >>
312+ ASSUME ReplaceFirstSubSeqPure ( << 4 , 4 >> , << 3 >> , << 3 , 2 , 3 , 4 >> ) = << 4 , 4 , 2 , 3 , 4 >>
313+ ASSUME ReplaceFirstSubSeqPure ( << 4 >> , << 1 , 2 >> , << 1 , 2 , 1 , 2 >> ) = << 4 , 1 , 2 >>
314+ ASSUME ReplaceFirstSubSeqPure ( << 4 , 4 >> , << 1 , 2 >> , << 1 , 2 , 1 , 2 >> ) = << 4 , 4 , 1 , 2 >>
315+ ASSUME ReplaceFirstSubSeqPure ( << 4 , 4 , 4 >> , << 1 , 2 >> , << 1 , 2 , 1 , 2 >> ) = << 4 , 4 , 4 , 1 , 2 >>
316+
317+ ASSUME ReplaceFirstSubSeqPure ( << 1 , 2 >> , << 1 , 2 >> , << 1 , 2 , 2 , 1 >> ) = << 1 , 2 , 2 , 1 >>
318+ ASSUME ReplaceFirstSubSeqPure ( << 2 , 1 >> , << 1 , 2 >> , << 1 , 2 , 2 , 1 >> ) = << 2 , 1 , 2 , 1 >>
319+
320+ ASSUME \A seq \in ( BoundedSeq ( 1 .. 5 , 5 ) \ { << >> } ) :
321+ /\ ReplaceFirstSubSeqPure ( << 6 >> , << >> , seq ) = << 6 >> \o seq
322+ /\ ReplaceFirstSubSeqPure ( << 6 >> , << Head ( seq ) >> , seq ) = << 6 >> \o Tail ( seq )
323+
324+ ASSUME ReplaceFirstSubSeqPure ( "" , "" , "" ) = ""
325+ ASSUME ReplaceFirstSubSeqPure ( "a" , "" , "" ) = "a"
326+ ASSUME ReplaceFirstSubSeqPure ( "a" , "b" , "" ) = ""
327+ ASSUME ReplaceFirstSubSeqPure ( "a" , "d" , "abc" ) = "abc"
328+ ASSUME ReplaceFirstSubSeqPure ( "ddd" , "ab" , "abab" ) = "dddab"
329+ ASSUME ReplaceFirstSubSeqPure ( "ddd" , "aa" , "aaa" ) = "ddda"
330+ ASSUME ReplaceFirstSubSeqPure ( "ddd" , "abab" , "abab" ) = "ddd"
331+
332+ ASSUME ( ReplaceFirstSubSeqPure ( "\\ " , "%%" , "Properly escape the %% char" ) = "Properly escape the \\ char" )
333+ ASSUME ( ReplaceFirstSubSeqPure ( "\" " , "%%" , "Properly escape the %% char" ) = "Properly escape the \" char" )
334+ ASSUME ( ReplaceFirstSubSeqPure ( "\n " , "%%" , "Properly escape the %% char" ) = "Properly escape the \n char" )
335+ ASSUME ( ReplaceFirstSubSeqPure ( "\t " , "%%" , "Properly escape the %% char" ) = "Properly escape the \t char" )
336+ ASSUME ( ReplaceFirstSubSeqPure ( "\f " , "%%" , "Properly escape the %% char" ) = "Properly escape the \f char" )
337+ ASSUME ( ReplaceFirstSubSeqPure ( "\r " , "%%" , "Properly escape the %% char" ) = "Properly escape the \r char" )
338+
339+ ASSUME ReplaceFirstSubSeqPure ( "\\ \\ " , "\\ " , "Properly escape the \\ quotes" ) = "Properly escape the \\ \\ quotes"
340+ ASSUME ReplaceFirstSubSeqPure ( "replaces" , "%pattern%" , "This %pattern% the pattern" ) = "This replaces the pattern"
341+
294342-----------------------------------------------------------------------------
295343
296344ASSUME AssertEq ( ReplaceAllSubSeqs ( << 4 >> , << 1 >> , << >> ) , << >> )
0 commit comments