On Tuesday, 29 July 2014 at 20:52:28 UTC, Walter Bright wrote:
I've read yours and Ola's explanations of the difference, and I still can't discern any difference, other than the spelling.

Here is the difference:

action1(cmd){
  assert( !lowercase( cmd )); //wrong theorem
  if(cmd=='format') format_harddisk()
}

action2(cmd){
  assume( !lowercase( cmd )); //wrong theorem
  if(cmd=='format') format_harddisk()
}


release:

action1(cmd){
  if(cmd=='format') format_harddisk()
}

action2(cmd){
  format_harddisk()
}

I still have problems convincing people that assert is not to be used to validate user input.

Has nothing to do with user input. From a correctness perspective there is no such thing as user input. You only get valid input. What you almost always have is a mismatch between specification and implementation. The best you can hope to have is partial correctness. Even with a system for formal verification.

Reply via email to