36 lines
1.5 KiB
Text
36 lines
1.5 KiB
Text
structure State -- TODO
|
||
|
||
structure Expr -- TODO
|
||
|
||
def eval : State → Expr → Bool :=
|
||
fun _ _ => true
|
||
|
||
inductive Command where
|
||
| skip
|
||
| cond : Expr → Command → Command → Command
|
||
| «while» : Expr → Command → Command
|
||
| seq : Command → Command → Command
|
||
|
||
open Command
|
||
|
||
infix:10 ";;" => Command.seq
|
||
|
||
inductive Bigstep : Command × State → State → Nat → Prop where
|
||
| skip : Bigstep (skip, σ) σ 1
|
||
| seq : Bigstep (c₁, σ₁) σ₂ t₁ → Bigstep (c₂, σ₂) σ₃ t₂ → Bigstep (c₁ ;; c₂, σ₁) σ₃ (t₁ + t₂ + 1)
|
||
| ifTrue : eval σ₁ b = true → Bigstep (c₁, σ₁) σ₂ t → Bigstep (cond b c₁ c₂, σ₁) σ₂ (t + 1)
|
||
| ifFalse : eval σ₁ b = false → Bigstep (c₂, σ₁) σ₂ t → Bigstep (cond b c₁ c₂, σ₁) σ₂ (t + 1)
|
||
|
||
#check @Bigstep.seq
|
||
|
||
namespace WithoutAutoImplicit
|
||
|
||
set_option autoImplicit false
|
||
|
||
inductive Bigstep : Command × State → State → Nat → Prop where
|
||
| skip {σ} : Bigstep (skip, σ) σ 1
|
||
| seq {c₁ c₂ σ₁ σ₂ σ₃ t₁ t₂} : Bigstep (c₁, σ₁) σ₂ t₁ → Bigstep (c₂, σ₂) σ₃ t₂ → Bigstep (c₁ ;; c₂, σ₁) σ₃ (t₁ + t₂ + 1)
|
||
| ifTrue {b c₁ c₂ σ₁ σ₂ t} : eval σ₁ b = true → Bigstep (c₁, σ₁) σ₂ t → Bigstep (cond b c₁ c₂, σ₁) σ₂ (t + 1)
|
||
| ifFalse {b c₁ c₂ σ₁ σ₂ t} : eval σ₁ b = false → Bigstep (c₂, σ₁) σ₂ t → Bigstep (cond b c₁ c₂, σ₁) σ₂ (t + 1)
|
||
|
||
end WithoutAutoImplicit
|