Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to prove this simple theorem in Isabelle?

I define a very simple function replace which replaces 1 with 0 while preserving other input values. I want to prove that the output of the function cannot be 1. How to achieve this?

Here's the code.

theory Question
  imports Main
begin
fun replace :: "nat ⇒ nat" where
"replace (Suc 0) = 0" |
"replace x = x"

theorem no1: "replace x ≠ (Suc 0)"
  sorry
end

Thanks!

like image 430
Dev-XYS Avatar asked Oct 24 '25 21:10

Dev-XYS


1 Answers

There exist several approaches for proving the statement that you are trying to prove.


You can make an attempt to use sledgehammer to find the proof automatically, e.g.

theorem no1: "replace x ≠ (Suc 0)"
  by sledgehammer
  (*using replace.elims by blast*)

Once the proof is found, you can delete the explicit invocation of the command sledgehammer.

Perhaps, a slightly better way to state the proof found by the sledgehammer would be

theorem no1': "replace x ≠ (Suc 0)"
  by (auto elim: replace.elims)

You can also try to provide a more specialized proof. For example,

theorem no1: "replace x ≠ (Suc 0)"
  by (cases x rule: replace.cases) simp_all

This proof looks at the different cases the value of x can have and then uses simplifier (in conjunction with the simp rules provided by the command fun during the definition of your function) to finish the proof. You can see all theorems that are generated by the command fun by typing print_theorems immediately after the specification of replace, e.g.

fun replace :: "nat ⇒ nat" where
  "replace (Suc 0) = 0" |
  "replace x = x"

print_theorems 

Of course, there are other ways to prove the result that you are trying to prove. One good way to improve your ability to find such proofs is by reading the documentation and tutorials on Isabelle. My own starting point for learning Isabelle was the book "Concrete Semantics" by Tobias Nipkow and Gerwin Klein.

like image 67
user9716869 - supports Ukraine Avatar answered Oct 27 '25 01:10

user9716869 - supports Ukraine



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!