Skip to content

Instantly share code, notes, and snippets.

View mbrcknl's full-sized avatar
🕸️
catching bugs

Matthew Brecknell mbrcknl

🕸️
catching bugs
View GitHub Profile
Lemma list_len_odd_even_ind:
forall
(X: Type)
(P: list X -> Prop)
(H: forall xs, length xs = 0 -> P xs)
(J: forall xs, length xs = 1 -> P xs)
(K: forall xs n, length xs = n -> P xs -> forall ys, length ys = S (S n) -> P ys)
(l: list X),
P l.
Proof.
Lemma list_narrow_ind:
forall
(X: Type)
(P: list X -> Prop)
(H: P [])
(J: forall x, P [x])
(K: forall x ys z, P ys -> P (x :: ys ++ [z]))
(l: list X),
P l.
Proof.
Require Import List.
Import ListNotations.
Set Implicit Arguments.
Fixpoint reverse (X: Type) (xs: list X): list X :=
match xs with
| [] => []
| x :: xs' => reverse xs' ++ [x]
end.
Require Import List.
Import ListNotations.
Set Implicit Arguments.
Definition rev_spec (X: Type) (rev: list X -> list X) :=
(forall x, rev [x] = [x]) /\ (forall xs ys, rev (xs ++ ys) = rev ys ++ rev xs).
Lemma app_eq_nil: forall (X: Type) (xs ys: list X), xs ++ ys = xs -> ys = [].
induction xs; simpl; inversion 1; auto.

Keybase proof

I hereby claim:

  • I am mbrcknl on github.
  • I am mbrcknl (https://keybase.io/mbrcknl) on keybase.
  • I have a public key whose fingerprint is 37B9 11E4 FB0C 3331 D832 1E56 3F92 8682 66EE 73F0

To claim this, I am signing this object:

data bool : Set where
tt : bool
ff : bool
data ℕ : Set where
zero : ℕ
succ : ℕ → ℕ
_+_ : ℕ → ℕ → ℕ
zero + n = n
data ℕ : Set where
zero : ℕ
succ : ℕ → ℕ
_+_ : ℕ → ℕ → ℕ
zero + n = n
succ m + n = succ (m + n)
_×_ : ℕ → ℕ → ℕ
zero × n = zero
{-# LANGUAGE ScopedTypeVariables #-}
-- | Solve the r-peg Towers of Hanoi puzzle, using the Frame-Stewart algorithm.
module Hanoi where
import Prelude
( Bool(..), Int, Integer, Integral, Eq(..), Ord(..), Ordering(..)
, error, fst, length, map, otherwise, snd, (+), (++), (-), (*), ($)
, minimum, head, last
@mbrcknl
mbrcknl / after.agda
Last active August 29, 2015 14:17
Before and after live-coding some Agda at BFPG
-- Matthew Brecknell @mbrcknl
-- BFPG.org, March 2015
open import Agda.Primitive using (_⊔_)
postulate
String : Set
{-# BUILTIN STRING String #-}
Definition red_split_a {red: red_type} {e: aexp} (ret: red_cexp red a e): red_aexp red e :=
match ret in red_cexp _ t e return
(match t return exp_type t -> Type with
| a => fun e' => red_aexp red e'
| b => fun _ => unit
end e)
with
| RCNum n => RANum n
| RCPlus _ _ a1 a2 => RAPlus a1 a2
| RCMinus _ _ a1 a2 => RAMinus a1 a2