Hi Augusto,

| Define `faa x = if x >= 2 then if x=3 then 3 else faa(x-1) else ARB`;
|
| Now using the ARB I can prove the termination, but the function is  
| clearly not terminating if the input is '2'. This is what I call the  
| unsoundness although maybe the term is not quite correct for this  
| situation.

I don't see why you say that. The call faa(2) generates a recursive
call to faa(1), but then the x >= 2 guard fails and you return ARB.
Here's a similar function in OCaml:

  # let rec faa x = if x >= 2 then if x=3 then 3 else faa(x-1) else 9999;;
  val faa : int -> int = <fun>
  # faa 2;;
  val it : int = 9999

On the question of "soundness", it might also be useful to distinguish
two things:

 1. The function would, when executed in a programming language, 
    terminate

 2. Adding the definition is logically consistent

In general a definition may satisfy (2) without satisfying (1). In
particular, any tail-recursive definition satisfies (2), as J Moore
once pointed out to me. For example:

  f(x) = f(x + 1)

is obviously not terminating. But it is entirely logically consistent,
because you could have defined, say

  f(x) = 42

and it would satisfy that recursion equation.

John.

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
hol-info mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to