Proofsummit2011a
Upcoming SlideShare
Loading in...5
×
 

Proofsummit2011a

on

  • 1,068 views

Talk at Proof Summit 2011 on 2011/09/25

Talk at Proof Summit 2011 on 2011/09/25

Statistics

Views

Total Views
1,068
Views on SlideShare
1,055
Embed Views
13

Actions

Likes
0
Downloads
9
Comments
0

4 Embeds 13

http://strawberryj.am 6
http://paper.li 5
https://twitter.com 1
https://si0.twimg.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Proofsummit2011a Proofsummit2011a Presentation Transcript

  • Proof Summit 2011 Coq @tmiya September 25,2011@tmiya : Coq , 1
  • @tmiya_ SIer 2007 LL Spirit Coq • Coq • Haskell Scala 2009 Agda • @yoshihiro503 bool Prop • =⇒ Coq 2010 2 @kencoba Formal Methods Forum • • ProofCafe : Coq@tmiya : Coq , 2
  • Coq User Contribution@tmiya : Coq , 3
  • — @kinaba d. y. d.@tmiya : Coq , 4
  • (regular expression) ∅ "a" "b" ... L1 , L2 {xy |x ∈ L1 , y ∈ L2 } L1 , L2 L1 ∪ L2 L 0 ∪ {x|x ∈ L} ∪ {xx|x ∈ L} ∪ . . .@tmiya : Coq , 5
  • ”Derivatives of Regular Expressions”, Janusz Brzozowski, Journal of the ACM 1964. R(s) : s R { ν(R) (s = ””) R(s) = (∂a R)(s ) (s = a :: s ) ν(R) = R ∂a R = R a NFA R a ∂a R ”Yacc is Dead” (http://arxiv.org/abs/1010.5023) 2011 Brzozowski@tmiya : Coq , 6
  • R ν(R) ∂a R ∅ false ∅ true { ∅ (c = a) "c" false { ∅ (c = a) (∂a R)S (ν(R) = false) RS ν(R) ∧ ν(S) (∂a R)S + (∂a S) (ν(R) = true) R +S ν(R) ∨ ν(S) (∂a R) + (∂a S) R∗ true (∂a R)R ∗ ⇒ d(fg ) = f (dg ) + (df )g@tmiya : Coq , 7
  • (1/4) 30 Inductive RegExp : Set := (* *) | Empty : RegExp (* *) | Eps : RegExp (* *) | Char : ascii -> RegExp (* *) | Cat : RegExp -> RegExp -> RegExp (* *) | Or : RegExp -> RegExp -> RegExp (* *) | Star : RegExp -> RegExp (* *) Notation "a ++ b" := (Cat a b). Notation "a || b" := (Or a b).@tmiya : Coq , 8
  • (2/4) Fixpoint nu(re:RegExp):bool := match re with | Empty => false | Eps => true | Char c => false | Cat r s => (nu r && nu s)%bool | Or r s => (nu r || nu s)%bool | Star r => true end.@tmiya : Coq , 9
  • (3/4) Fixpoint derive(a:ascii)(re:RegExp):RegExp := match re with | Empty => Empty | Eps => Empty | Char c => match (ascii_dec c a) with | left _ => Eps | right _ => Empty end | Cat r s => match (nu r) with | true => ((derive a r) ++ s) || (derive a s) | false => (derive a r) ++ s end | Or r s => (derive a r) || (derive a s) | Star r => (derive a r) ++ (Star r) end. Notation "re / a" := (derive a re).@tmiya : Coq , 10
  • (4/4) Fixpoint matches (re:RegExp)(s:string) : bool := match s with | EmptyString => nu re | String a w => matches (re / a) w end. Notation "re ~= s" := (matches re s) (at level 60).@tmiya : Coq , 11
  • KleeneKleene ”A Completeness Theorem for Kleene Algebras and the Algebra of Regular Events,” D. Kozen (1994) ∅ 0 1 • x + (y + z) = (x + y ) + z, x(yz) = (xy )z : • x +y =y +z : • x(y + z) = xy + xz, (x + y )z = xz + yz : • x + 0 = 0 + x = x, 1x = x1 = x : • x0 = 0x = 0 : x +x =x : Kleene-star (x ≤ y ⇔ x + y = y ) • 1 + xx ∗ ≤ x ∗ , 1 + x ∗ x ≤ x ∗ • x + yz ≤ z ⇒ y ∗ x ≤ z • x + yz ≤ y ⇒ xy ∗ ≤ z Kleene : :@tmiya : Coq , 12
  • Kleene (1/3) Brzozowski Kleene Coq • 1500 • Setoid =⇒ setoid_rewrite tactic • Brzozowski Coq • Kleene • ”A tactic for deciding Kleene algebras” •@tmiya : Coq , 13
  • Kleene (2/3) Coq • induction re. • Or Cat, Star • =⇒ induction s. Lemma divide_Cat : forall s r’ r’’, (r’ ++ r’’) ~== s -> {s’:string & {s’’:string | s = (s’ ++ s’’)%string / r’ ~== s’ / r’’ ~== s’’ }}.@tmiya : Coq , 14
  • Kleene (3/3) + +rr ∗ = r ∗ + +r ∗ r = r∗ • r∗ r =⇒ r ∗ Lemma Star_to_list : forall s r, (Star r) ~== s -> {ss:list string | forallb (fun s => r ~= s) ss = true / concat_list_string ss = s / forallb (fun s => bneq_empty_string s) ss = true }. • s • refine (induction_ltof2 string str_length _ _). Setoid@tmiya : Coq , 15
  • User ContributionCoq User Contribution INRIA The Coq User’s Contributions 1. Makefile • Make -R . RegExp Char.v ... RegExp.v (Coqdoc ) • $ coq_makefile -f Make -o Makefile • $ make clean all all-gal.pdf html • $ tar -cf RegExp.tar Makefile *.v 2. tar upload 3. Coq user contributions submit • Coq LGPL@tmiya : Coq , 16
  • Brzozowski ( ) Kleene Coq INRIA User contribution@tmiya : Coq , 17