mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
Isabelle language - fixed lexer and added sample
Also, Isabelle is very polular in academia. See for example http://scholar.google.de/scholar?q=isabelle%2FHOL In around 40 days, the seL4 microkernel [1] with its Isabelle proofs is (probably) released on github [2]. [1] http://sel4.systems/ [2] https://lists.cam.ac.uk/mailman/htdig/cl-isabelle-users/2014-June/msg00011.html
This commit is contained in:
@@ -989,6 +989,7 @@ IRC log:
|
|||||||
|
|
||||||
Isabelle:
|
Isabelle:
|
||||||
type: programming
|
type: programming
|
||||||
|
lexer: Text only
|
||||||
color: "#fdcd00"
|
color: "#fdcd00"
|
||||||
extensions:
|
extensions:
|
||||||
- .thy
|
- .thy
|
||||||
|
|||||||
46
samples/Isabelle/HelloWorld.thy
Normal file
46
samples/Isabelle/HelloWorld.thy
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
theory HelloWorld
|
||||||
|
imports Main
|
||||||
|
begin
|
||||||
|
|
||||||
|
section{*Playing around with Isabelle*}
|
||||||
|
|
||||||
|
text{* creating a lemma with the name hello_world*}
|
||||||
|
lemma hello_world: "True" by simp
|
||||||
|
|
||||||
|
(*inspecting it*)
|
||||||
|
thm hello_world
|
||||||
|
|
||||||
|
text{* defining a string constant HelloWorld *}
|
||||||
|
|
||||||
|
definition HelloWorld :: "string" where
|
||||||
|
"HelloWorld \<equiv> ''Hello World!''"
|
||||||
|
|
||||||
|
(*reversing HelloWorld twice yilds HelloWorld again*)
|
||||||
|
theorem "rev (rev HelloWorld) = HelloWorld"
|
||||||
|
by (fact List.rev_rev_ident)
|
||||||
|
|
||||||
|
text{*now we delete the already proven List.rev_rev_ident lema and show it by hand*}
|
||||||
|
declare List.rev_rev_ident[simp del]
|
||||||
|
hide_fact List.rev_rev_ident
|
||||||
|
|
||||||
|
(*It's trivial since we can just 'execute' it*)
|
||||||
|
corollary "rev (rev HelloWorld) = HelloWorld"
|
||||||
|
apply(simp add: HelloWorld_def)
|
||||||
|
done
|
||||||
|
|
||||||
|
text{*does it hold in general?*}
|
||||||
|
theorem rev_rev_ident:"rev (rev l) = l"
|
||||||
|
proof(induction l)
|
||||||
|
case Nil thus ?case by simp
|
||||||
|
next
|
||||||
|
case (Cons l ls)
|
||||||
|
assume IH: "rev (rev ls) = ls"
|
||||||
|
have "rev (l#ls) = (rev ls) @ [l]" by simp
|
||||||
|
hence "rev (rev (l#ls)) = rev ((rev ls) @ [l])" by simp
|
||||||
|
also have "\<dots> = [l] @ rev (rev ls)" by simp
|
||||||
|
finally show "rev (rev (l#ls)) = l#ls" using IH by simp
|
||||||
|
qed
|
||||||
|
|
||||||
|
corollary "\<forall>(l::string). rev (rev l) = l" by(fastforce intro: rev_rev_ident)
|
||||||
|
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user