primrec lift where "lift (Var j) k = Var (if j < k then j else j + 1)" | "lift (Lam t) k = Lam (lift t (k + 1))" | "lift (App t u) k = App (lift t k) (lift u k)"
primrec loose where "loose (Var j) k = (j ≥ k)" | "loose (Lam t) k = loose t (Suc k)" | "loose (App t u) k = (loose t k ∨ loose u k)"
primrec subst1where "subst1 σ (Var j) = σ j" | "subst1 σ (Lam t) = Lam (subst1 (λn. case n of 0 ==> Var 0 | Suc m ==> lift (σ m) 1) t)" | "subst1 σ (App t u) = App (subst1 σ t) (subst1 σ u)"
lemma"n ∈ reach ==> 2 dvd n ∧ n ≠ 0" (* nitpick *) apply (induct set: reach) apply auto
nitpick [card = 1-4, bits = 1-4, expect = none] apply (thin_tac "n ∈ reach")
nitpick [expect = genuine] oops
lemma"n ∈ reach ==> 2 dvd n ∧ n ≥ 4" by (induct set: reach) arith+
section‹3. Case Studies›
nitpick_params [max_potential = 0]
subsection‹3.1. A Context-Free Grammar›
datatype alphabet = a | b
inductive_set S1and A1and B1where "[] ∈ S1"
| "w ∈ A1==> b # w ∈ S1"
| "w ∈ B1==> a # w ∈ S1"
| "w ∈ S1==> a # w ∈ A1"
| "w ∈ S1==> b # w ∈ S1"
| "[v ∈ B1; v ∈ B1]==> a # v @ w ∈ B1"
theorem S1_sound: "w ∈ S1⟶ length [x ← w. x = a] = length [x ← w. x = b]"
nitpick [expect = genuine] oops
inductive_set S2and A2and B2where "[] ∈ S2"
| "w ∈ A2==> b # w ∈ S2"
| "w ∈ B2==> a # w ∈ S2"
| "w ∈ S2==> a # w ∈ A2"
| "w ∈ S2==> b # w ∈ B2"
| "[v ∈ B2; v ∈ B2]==> a # v @ w ∈ B2"
theorem S2_sound: "w ∈ S2⟶ length [x ← w. x = a] = length [x ← w. x = b]"
nitpick [expect = genuine] oops
inductive_set S3and A3and B3where "[] ∈ S3"
| "w ∈ A3==> b # w ∈ S3"
| "w ∈ B3==> a # w ∈ S3"
| "w ∈ S3==> a # w ∈ A3"
| "w ∈ S3==> b # w ∈ B3"
| "[v ∈ B3; w ∈ B3]==> a # v @ w ∈ B3"
theorem S3_sound: "w ∈ S3⟶ length [x ← w. x = a] = length [x ← w. x = b]"
nitpick [card = 1-5, expect = none] sorry
theorem S3_complete: "length [x ← w. x = a] = length [x ← w. x = b] ⟶ w ∈ S3"
nitpick [expect = genuine] oops
inductive_set S4and A4and B4where "[] ∈ S4"
| "w ∈ A4==> b # w ∈ S4"
| "w ∈ B4==> a # w ∈ S4"
| "w ∈ S4==> a # w ∈ A4"
| "[v ∈ A4; w ∈ A4]==> b # v @ w ∈ A4"
| "w ∈ S4==> b # w ∈ B4"
| "[v ∈ B4; w ∈ B4]==> a # v @ w ∈ B4"
theorem S4_sound: "w ∈ S4⟶ length [x ← w. x = a] = length [x ← w. x = b]"
nitpick [card = 1-5, expect = none] sorry
theorem S4_complete: "length [x ← w. x = a] = length [x ← w. x = b] ⟶ w ∈ S4"
nitpick [card = 1-5, expect = none] sorry
theorem S4_A4_B4_sound_and_complete: "w ∈ S4⟷ length [x ← w. x = a] = length [x ← w. x = b]" "w ∈ A4⟷ length [x ← w. x = a] = length [x ← w. x = b] + 1" "w ∈ B4⟷ length [x ← w. x = b] = length [x ← w. x = a] + 1"
nitpick [card = 1-5, expect = none] sorry
subsection‹3.2. AA Trees›
datatype 'a aa_tree = Λ | N "'a::linorder" nat "'a aa_tree""'a aa_tree"
primrec data where "data Λ = undefined" | "data (N x _ _ _) = x"
primrec dataset where "dataset Λ = {}" | "dataset (N x _ t u) = {x} ∪ dataset t ∪ dataset u"
primrec level where "level Λ = 0" | "level (N _ k _ _) = k"
primrec left where "left Λ = Λ" | "left (N _ _ t1 _) = t1"
primrec right where "right Λ = Λ" | "right (N _ _ _ t2) = t2"
fun wf where "wf Λ = True" | "wf (N _ k t u) = (if t = Λ then k = 1 ∧ (u = Λ ∨ (level u = 1 ∧ left u = Λ ∧ right u = Λ)) else wf t ∧ wf u ∧ u ≠ Λ ∧ level t < k ∧ level u ≤ k ∧ level (right u) < k)"
fun skew where "skew Λ = Λ" | "skew (N x k t u) = (if t ≠ Λ ∧ k = level t then N (data t) k (left t) (N x k (right t) u) else N x k t u)"
fun split where "split Λ = Λ" | "split (N x k t u) = (if u ≠ Λ ∧ k = level (right u) then N (data u) (Suc k) (N x k t (left u)) (right u) else N x k t u)"
theorem wf_skew_split: "wf t ==> skew t = t" "wf t ==> split t = t"
nitpick [card = 1-5, expect = none] sorry
primrec insort1where "insort1 Λ x = N x 1 Λ Λ" | "insort1 (N y k t u) x = 🍋‹(split ∘ skew)› (N y k (if x < y then insort1 t x else t) (if x > y then insort1 u x else u))"
theorem wf_insort1: "wf t ==> wf (insort1 t x)"
nitpick [expect = genuine] oops
theorem wf_insort1_nat: "wf t ==> wf (insort1 t (x::nat))"
nitpick [eval = "insort1 t x", expect = genuine] oops
primrec insort2where "insort2 Λ x = N x 1 Λ Λ" | "insort2 (N y k t u) x = (split ∘ skew) (N y k (if x < y then insort2 t x else t) (if x > y then insort2 u x else u))"
theorem wf_insort2: "wf t ==> wf (insort2 t x)"
nitpick [card = 1-5, expect = none] sorry
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.