[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [rohc] Updated FN Draft - Appendix A
> On Mar 30 2005, at 13:46 Uhr, Lars-Erik Jonsson ((LU/EAB)) wrote:
>
> > I had preferred a let statement that was only used for the
> > purpose of making definitions, while having a separate mechanism
> > for assertions.
>
> The problem here is that we don't seem to be communicating very well
> between the different mindsets.
Agree!
> Given that I'm looking at FN from a relational mindset, I'm still not
> sure what the distinction is.
So, let's look at the examples you've given...
> Example 1:
>
> variable_length_32_enc(flag) ===
> {
> uc_format = field; %[ 32 ]
>
> co_format_not_present = field, %[ 0 ]
> {
> let(flag == 0);
> field ::= static;
> };
> co_format_8_bit = field, %[ 8 ]
> {
> let(flag == 1);
> field ::= lsb(8, 63);
> };
> co_format_16_bit = field, %[ 16 ]
> {
> let(flag == 2);
> field ::= lsb(16, 16383);
> };
> co_format_32_bit = field, %[ 32 ]
> {
> let(flag == 3);
> field ::= irregular(32);
> };
> };
This is what I call a typical assertion, in non-matematical
English I would express this as an "If"-condition.
> Example 2:
>
> irreg_tos_tc ===
> {
> uc_format = tos_tc; %[ 6 ]
>
> co_format_tos_tc_present = tos_tc, %[ 6 ]
> {
> let(ecn_used:uncomp_value == 1);
> tos_tc ::= irregular (6);
> };
>
> co_format_tos_tc_not_present = tos_tc, %[ 0 ]
> {
> let(ecn_used:uncomp_value == 0);
> tos_tc ::= static;
> };
> };
This is what I call a typical assertion, in non-matematical
English I would express this as an "If"-condition.
> Example 3:
> [...]
> co_format_ipv6_innermost_irregular =
> {
> let(ip_inner_ecn:uncomp_value ==
> ip_ecn_flags:uncomp_value);
> };
> [...]
I'm not sure about the context here! I guess this is also an "if".
> Example 4:
> [...]
> co_format_eol_irregular =
> {
> let(nbits - 8 == pad_len:uncomp_value);
> };
> [...]
I'm not sure about the context here! I guess this is also an "if".
> Example 5:
> [...]
> co_format_sack1_list_item = discriminator,
> block_1,
> {
> let(length:uncomp_value == 10);
> discriminator ::= '00000001';
> block_1 ::= tcp_opt_sack_block (ack_value);
> };
> [...]
This also seems to be what I call a typical assertion, in
non-matematical English I would express this as an "If"-condition.
> Example 6:
> [...]
> let (seq_number_scaled:uncomp_value ==
> seq_number:uncomp_value / payload_size);
> let (seq_number_residue:uncomp_value ==
> mod(seq_number:uncomp_value, payload_size));
> let (ack_number:uncomp_value ==
> (ack_stride:uncomp_value *
> ack_number_scaled:uncomp_value) +
> ack_number_residue:uncomp_value);
> let (ack_number_residue:uncomp_value ==
> mod(ack_number:uncomp_value,
> ack_stride:uncomp_value));
> [...]
This is what I call a definition, also what I believe is
the intuitive meaning of let. This usage of let is what is
exemplified in appendix B. To me, let can never be false,
while a condition (assertion, "if") of course can, as that
is the purpose of it.
/L-E
_______________________________________________
Rohc mailing list
Rohc at ietf.org
https://www1.ietf.org/mailman/listinfo/rohc