def lex_number_tail

qasim-bend-kit@0.1.0.2 · proof/JSON_NumberLexProof.bend:226

import qasim-bend-kit@0.1.0.2/proof/JSON_NumberLexProof.bend as JSONNumberLexProof
import Base
import qasim-bend-kit@0.1.0.2/libs/JSON.bend as J
import qasim-bend-kit@0.1.0.2/proof/JSON_StringProof.bend as S

226def lex_number_tail(+text: String,
227                    +state: J.NumberState,
228                    +rev_head: Char,
229                    +rev_tail: String,
230                    +first: Char,
231                    +prefix_tail: String,
232                    +reverse_prefix: {String.reverse(SCon{rev_head, rev_tail}) == SCon{first, prefix_tail} : String},
233                    +evidence: {J.number_valid_end(J.number_valid_step(text, state)) == True{} : Bool}) -> {J.lex_scan(text, J.Outside{}, SCon{rev_head, rev_tail}, Nil{}) == (J.Payload{SCon{first, prefix_tail} ++ text} <> Nil{}) : List<&2, J.Lexeme>}:
234    match text:
235        case SNil{}:
236            Equal.trans(List<&2, J.Lexeme>,
237                J.lex_scan(SNil{}, J.Outside{}, SCon{rev_head, rev_tail}, Nil{}),
238                J.Payload{String.reverse(SCon{rev_head, rev_tail})} <> Nil{},
239                J.Payload{SCon{first, prefix_tail} ++ SNil{}} <> Nil{},
240                {==},
241                Equal.trans(List<&2, J.Lexeme>,
242                    J.Payload{String.reverse(SCon{rev_head, rev_tail})} <> Nil{},
243                    J.Payload{SCon{first, prefix_tail}} <> Nil{},
244                    J.Payload{SCon{first, prefix_tail} ++ SNil{}} <> Nil{},
245                    Equal.cong(String, List<&2, J.Lexeme>, s => J.Payload{s} <> Nil{},
246                        String.reverse(SCon{rev_head, rev_tail}), SCon{first, prefix_tail}, reverse_prefix),
247                    Equal.cong(String, List<&2, J.Lexeme>, s => J.Payload{s} <> Nil{},
248                        SCon{first, prefix_tail}, SCon{first, prefix_tail} ++ SNil{},
249                        Equal.sym(String, SCon{first, prefix_tail} ++ SNil{}, SCon{first, prefix_tail}, S.append_nil(SCon{first, prefix_tail})))))
250        case SCon{+head, +tail}:
251            Equal.trans(List<&2, J.Lexeme>,
252                J.lex_scan(text, J.Outside{}, SCon{rev_head, rev_tail}, Nil{}),
253                J.lexemes(text, J.Outside{}, SCon{rev_head, rev_tail}, Nil{}, J.LexRaw{}),
254                J.Payload{SCon{first, prefix_tail} ++ text} <> Nil{},
255                Equal.cong(J.LexAction, List<&2, J.Lexeme>, action => J.lexemes(text, J.Outside{}, SCon{rev_head, rev_tail}, Nil{}, action),
256                    J.lex_seed_action(text, J.Outside{}), J.LexRaw{},
257                    number_char_action(head, J.number_char(head), {==}, tail, state, evidence)),
258                Equal.trans(List<&2, J.Lexeme>,
259                    J.lexemes(text, J.Outside{}, SCon{rev_head, rev_tail}, Nil{}, J.LexRaw{}),
260                    J.lex_scan(tail, J.Outside{}, SCon{head, SCon{rev_head, rev_tail}}, Nil{}),
261                    J.Payload{SCon{first, prefix_tail} ++ text} <> Nil{},
262                    {==},
263                    Equal.trans(List<&2, J.Lexeme>,
264                        J.lex_scan(tail, J.Outside{}, SCon{head, SCon{rev_head, rev_tail}}, Nil{}),
265                        J.Payload{(SCon{first, prefix_tail} ++ SCon{head, SNil{}}) ++ tail} <> Nil{},
266                        J.Payload{SCon{first, prefix_tail} ++ text} <> Nil{},
267                        lex_number_tail(tail, J.number_next(state, head), head, SCon{rev_head, rev_tail}, first,
268                            prefix_tail ++ SCon{head, SNil{}},
269                            Equal.trans(String,
270                                String.reverse(SCon{head, SCon{rev_head, rev_tail}}),
271                                String.reverse(SCon{rev_head, rev_tail}) ++ SCon{head, SNil{}},
272                                SCon{first, prefix_tail} ++ SCon{head, SNil{}},
273                                S.reverse_cons(head, SCon{rev_head, rev_tail}),
274                                Equal.cong(String, String, x => x ++ SCon{head, SNil{}},
275                                    String.reverse(SCon{rev_head, rev_tail}), SCon{first, prefix_tail}, reverse_prefix)),
276                            number_valid_cons(head, tail, state, evidence)),
277                        Equal.cong(String, List<&2, J.Lexeme>, s => J.Payload{s} <> Nil{},
278                            (SCon{first, prefix_tail} ++ SCon{head, SNil{}}) ++ tail,
279                            SCon{first, prefix_tail} ++ text,
280                            S.append_assoc(SCon{first, prefix_tail}, SCon{head, SNil{}}, tail)))))

Uses (25)

Used by (1)