~/bend-docscommunity

proof/JSON_PrimitiveProof.bend source

proof/JSON_PrimitiveProof.bend on the hub · documented module

import Baseimport ../libs/JSON.bend as Jdef R() -> Type:    Result<&1, &1, J.Error, J.Value>def absurd(-A: Type, empty: Empty) -> A:    match empty:def false_type(b: Bool) -> Data:    match b:        case False{}: Unit        case True{}: Emptydef false_true(e: {False{} == True{} : Bool}) -> Empty:    %e : false_type(_)    Unit{}def proof_valid(+valid: Bool, witness: J.NumberProofFrom(valid)) -> {valid == True{} : Bool}:    match valid:        case True{}: {==}        case False{}:            match witness:def cert_valid(+text: String,               certificate: J.NumberCert<text>) -> {J.number_valid(text) == True{} : Bool}:    match certificate:        case J.Certified{witness}: proof_valid(J.number_valid(text), witness)def proof_unique(+valid: Bool,                 +a: J.NumberProofFrom(valid),                 +b: J.NumberProofFrom(valid)) -> {a == b : J.NumberProofFrom(valid)}:    match valid:        case True{}:            match a b:                case Unit{} Unit{}: {==}        case False{}:            match a:def cert_unique(+text: String,                +a: J.NumberCert<text>,                +b: J.NumberCert<text>) -> {a == b : J.NumberCert<text>}:    match a b:        case J.Certified{x} J.Certified{y}:            Equal.cong(J.NumberProof(text), J.NumberCert<text>, w => J.Certified{w}, x, y, proof_unique(J.number_valid(text), x, y))def number_route(+text: String,                 +valid: Bool,                 +certificate: J.NumberCert<text>,                 evidence: {J.number_valid(text) == valid : Bool}) -> {J.payload_number(text, valid, evidence) == Done{J.Number{text, certificate}} : R()}:    match valid:        case True{}:            Equal.cong(J.NumberCert<text>, R(), c => Done{J.Number{text, c}},                J.Certified{J.number_proof(text, evidence)}, certificate,                cert_unique(text, J.Certified{J.number_proof(text, evidence)}, certificate))        case False{}:            absurd({J.payload_number(text, False{}, evidence) == Done{J.Number{text, certificate}} : R()},                false_true(Equal.trans(Bool, False{}, J.number_valid(text), True{},                    Equal.sym(Bool, J.number_valid(text), False{}, evidence), cert_valid(text, certificate))))def number_roundtrip(+text: String,                     +certificate: J.NumberCert<text>) -> {J.decode_payload(text) == Done{J.Number{text, certificate}} : R()}:    number_route(text, J.number_valid(text), certificate, {==})def invalid_step(+text: String) -> {J.number_valid_step(text, J.NumberInvalid{}) == J.NumberInvalid{} : J.NumberState}:    match text:        case SNil{}: {==}        case SCon{head, tail}: {==}def route_false(+text: String,                +valid: Bool,                evidence: {J.number_valid(text) == valid : Bool},                no: {valid == False{} : Bool}) -> {J.payload_number(text, valid, evidence) == J.payload_other(text) : R()}:    match valid:        case False{}: {==}        case True{}:            absurd({J.payload_number(text, True{}, evidence) == J.payload_other(text) : R()}, false_true(Equal.sym(Bool, True{}, False{}, no)))def decode_false(+text: String,                 no: {J.number_valid(text) == False{} : Bool}) -> {J.decode_payload(text) == J.payload_other(text) : R()}:    route_false(text, J.number_valid(text), {==}, no)def invalid_end(+text: String) -> {J.number_valid_end(J.number_valid_step(text, J.NumberInvalid{})) == False{} : Bool}:    Equal.cong(J.NumberState, Bool, J.number_valid_end, J.number_valid_step(text, J.NumberInvalid{}), J.NumberInvalid{}, invalid_step(text))