From 4afedcaf4ac95c0094da0645910db012fd47315b Mon Sep 17 00:00:00 2001 From: Julin S Date: Mon, 27 May 2024 16:56:40 +0530 Subject: [PATCH] more random stuff --- coq/ensemble-demo.v | 12 + coq/list-set/eins.v | 18 + coq/list-to-vec.v | 67 ++ coq/mathcomp/coqeal-hello.v | 78 +++ coq/mathcomp/mathcomp2/hb-fintype.v | 29 + coq/mathcomp/rel_fun.v | 52 ++ coq/ohe-sep-proof.v | 37 + coq/one-hot.v | 122 ++++ coq/re-thompson/re.v | 103 +++ coq/strict-positive.v | 184 +++++ coq/third-party/hb-fintype.v | 55 ++ coq/type-checker-atkey.v | 33 + coq/vec-last.v | 47 ++ haskell/cats/Orders.hs | 44 ++ haskell/clash/Dfa.hs | 16 + haskell/megaparsec-eg/Re2.hs | 116 +++ haskell/parsec-eg/CHANGELOG.md | 5 + haskell/parsec-eg/LICENSE | 661 ++++++++++++++++++ haskell/parsec-eg/app/Main.hs | 28 + .../parsec-eg/dist-newstyle/cache/compiler | Bin 0 -> 20463 bytes haskell/parsec-eg/dist-newstyle/cache/config | Bin 0 -> 5522 bytes .../dist-newstyle/cache/elaborated-plan | Bin 0 -> 84906 bytes .../dist-newstyle/cache/improved-plan | Bin 0 -> 146263 bytes .../parsec-eg/dist-newstyle/cache/plan.json | 1 + .../parsec-eg/dist-newstyle/cache/solver-plan | Bin 0 -> 76025 bytes .../dist-newstyle/cache/source-hashes | Bin 0 -> 909 bytes .../parsec-eg/dist-newstyle/cache/up-to-date | Bin 0 -> 507 bytes .../packagedb/ghc-9.4.8/package.cache | Bin 0 -> 40 bytes .../packagedb/ghc-9.4.8/package.cache.lock | 0 haskell/parsec-eg/parsec-eg.cabal | 81 +++ haskell/re-cps-trial.hs | 2 + haskell/re-trial.hs | 66 ++ latex/tikz/dfa.tex | 74 ++ 33 files changed, 1931 insertions(+) create mode 100644 coq/ensemble-demo.v create mode 100644 coq/list-set/eins.v create mode 100644 coq/list-to-vec.v create mode 100644 coq/mathcomp/coqeal-hello.v create mode 100644 coq/mathcomp/mathcomp2/hb-fintype.v create mode 100644 coq/mathcomp/rel_fun.v create mode 100644 coq/ohe-sep-proof.v create mode 100644 coq/one-hot.v create mode 100644 coq/re-thompson/re.v create mode 100644 coq/strict-positive.v create mode 100644 coq/third-party/hb-fintype.v create mode 100644 coq/type-checker-atkey.v create mode 100644 coq/vec-last.v create mode 100644 haskell/cats/Orders.hs create mode 100644 haskell/clash/Dfa.hs create mode 100644 haskell/megaparsec-eg/Re2.hs create mode 100644 haskell/parsec-eg/CHANGELOG.md create mode 100644 haskell/parsec-eg/LICENSE create mode 100644 haskell/parsec-eg/app/Main.hs create mode 100644 haskell/parsec-eg/dist-newstyle/cache/compiler create mode 100644 haskell/parsec-eg/dist-newstyle/cache/config create mode 100644 haskell/parsec-eg/dist-newstyle/cache/elaborated-plan create mode 100644 haskell/parsec-eg/dist-newstyle/cache/improved-plan create mode 100644 haskell/parsec-eg/dist-newstyle/cache/plan.json create mode 100644 haskell/parsec-eg/dist-newstyle/cache/solver-plan create mode 100644 haskell/parsec-eg/dist-newstyle/cache/source-hashes create mode 100644 haskell/parsec-eg/dist-newstyle/cache/up-to-date create mode 100644 haskell/parsec-eg/dist-newstyle/packagedb/ghc-9.4.8/package.cache create mode 100644 haskell/parsec-eg/dist-newstyle/packagedb/ghc-9.4.8/package.cache.lock create mode 100644 haskell/parsec-eg/parsec-eg.cabal create mode 100644 haskell/re-cps-trial.hs create mode 100644 haskell/re-trial.hs create mode 100644 latex/tikz/dfa.tex diff --git a/coq/ensemble-demo.v b/coq/ensemble-demo.v new file mode 100644 index 0000000..a75a210 --- /dev/null +++ b/coq/ensemble-demo.v @@ -0,0 +1,12 @@ +Require Import Ensembles. +Require Import Powerset. + +Declare Scope ens_scope. +Delimit Scope ens_scope with ens. +Infix "⊂" := Included (at level 50). +Infix "∈" := In (at level 40). +Infix "∪" := Union (at level 40). +Infix "∩" := Intersection (at level 40). +Notation "∅" := Empty_set. + +Notation "'P(' A ')" := (Power_set A). diff --git a/coq/list-set/eins.v b/coq/list-set/eins.v new file mode 100644 index 0000000..697876b --- /dev/null +++ b/coq/list-set/eins.v @@ -0,0 +1,18 @@ +(* Require Import List ssreflect. *) +(* Import ListNotations. *) + +From mathcomp Require Import seq ssreflect. + +Section Foo. + Context {A: Type}. + Context (beq: A -> A -> bool). + + Search (list _ -> _ -> nat). + + Definition onlyonce (l: list A) (a: A): Prop := + match + Definition unique (l: list A): Prop := + match l with + + Definition set {A: Type} (l: list A) +End Foo. diff --git a/coq/list-to-vec.v b/coq/list-to-vec.v new file mode 100644 index 0000000..7b45fe7 --- /dev/null +++ b/coq/list-to-vec.v @@ -0,0 +1,67 @@ +Require Import List Vector. +Import ListNotations. + +Require Import Extraction. +Extraction Language Haskell. + +Example lst1 := [1;2;3]. +Example vec1 := Eval compute in (of_list lst1). +Recursive Extraction vec1. + +(* +data Nat = + O + | S Nat + +data T a = + Nil + | Cons a Nat (T a) + +vec1 :: T Nat +vec1 = + Cons (S O) (S (S O)) (Cons (S (S O)) (S O) (Cons (S (S (S O))) O Nil)) +#+END_OUTPUT (Info) *) + +Require Import Vector. +Import VectorNotations. + +(* Extract Inductive nat => "Int" [ "0" "(+1)"]. *) +Extract Inductive nat => "Int" [ "0" "succ"] + "(\fO fS n -> if n == 0 then fO () else fS (n - 1))". + +Example vec := [true]. +Recursive Extraction vec. +(* +data T a = + Nil + | Cons a Int (T a) + +vec :: T Bool +vec = + Cons True 0 Nil +*) + +Require Import Fin. +Print Fin.t. +(* +Inductive t : nat -> Set := +| F1 : forall n : nat, t (S n) +| FS : forall n : nat, t n -> t (S n). +*) +Check F1: Fin.t 2. +Check FS F1. +Example f1: Fin.t 2 := FS F1. +Recursive Extraction f1. +(* +data T = + F1 Int + | FS Int T + +f1 :: T +f1 = + FS (succ 0) (F1 0) +*) + +Inductive myFin : nat -> Set := +| F1: myFin 1 +| FS: forall n: nat, myFin n -> myFin (S n). diff --git a/coq/mathcomp/coqeal-hello.v b/coq/mathcomp/coqeal-hello.v new file mode 100644 index 0000000..a31934b --- /dev/null +++ b/coq/mathcomp/coqeal-hello.v @@ -0,0 +1,78 @@ +(* https://coq.zulipchat.com/#narrow/stream/237664-math-comp-users/topic/coqeal.20example *) + + +From mathcomp Require Import ssreflect ssrfun ssrbool eqtype. +From mathcomp Require Import ssralg matrix ssrint. +From mathcomp Require Import all_algebra all_ssreflect. + +Local Open Scope ring_scope. + +Definition M2 : 'M[bool]_(2,2) := \matrix_(i,j < 2) 0. +Example zeromat: 'M[bool]_2 := 0. + +From CoqEAL Require Import hrel param refinements trivial_seq. +From CoqEAL Require Import binnat binint seqpoly binord seqmx. + + + +Goal ((0 : 'M[int]_(2,2)) == 0). + by coqeal. +Qed. + + +Check (M2 1 1). + +Check mulmx. + +From CoqEAL Require Import strassen. +Check Strassen. +(* +#+BEGIN_OUTPUT (Info) +Strassen + : forall R : ringType, + positive -> + forall p : positive, + 'M_(ssrnat.nat_of_pos p) -> + 'M_(ssrnat.nat_of_pos p) -> 'M_(ssrnat.nat_of_pos p) +#+END_OUTPUT (Info) *) +Check mulmx. +(* +#+BEGIN_OUTPUT (Info) +mulmx + : 'M_(?m, ?n) -> 'M_(?n, ?p) -> 'M_(?m, ?p) +where +?R : [ |- ringType] +?m : [ |- nat] +?n : [ |- nat] +?p : [ |- nat] +#+END_OUTPUT (Info) *) + +Search (matrix -> seq). + +Print seqmx. +Definition seqmx_of_mx {A: Type} {rows cols: nat} + (M : 'M[A]_(rows,cols)) : seqmx := [seq [seq M i j | j <- enum 'I_cols] | i <- enum 'I_rows]. + +Example M2' := Eval lazy in (seqmx_of_mx M2). +Require Import Extraction. +Print hseqmx. +Print seqmx. +Extraction M2'. +Extraction seqmx_of_mx. +Extraction M2'. + +Goal + (0: 'M[bool]_3) 2 1 == true. +Proof. + rewrite //=. + rewrite Rseqmx_0. + +Goal + M2 1 2 == 0. +Proof. + Check Rseqmx_0. + + rewrite -Rseqmx_0. + rewrite Rseqmx_0. + + diff --git a/coq/mathcomp/mathcomp2/hb-fintype.v b/coq/mathcomp/mathcomp2/hb-fintype.v new file mode 100644 index 0000000..1f78f2f --- /dev/null +++ b/coq/mathcomp/mathcomp2/hb-fintype.v @@ -0,0 +1,29 @@ +From HB Require Import structures. +From mathcomp Require Import all_ssreflect all_algebra. + +Require Import Extraction. +Extraction Language Haskell. + +Variable A: finType. +HB.about enum. +HB.check enum. +Recursive Extraction (enum A). + +HB.about eqType. +Check eqP. +Check eq_op. + +HB.about finType. +HB.about enumP_subdef. +Check enumP_subdef. + +About finType. +About Finite.type. +HB.about Finite.type. +Fail HB.about finType. +Fail HB.about isFinite. +Fail HB.about Finite. +Fail Fail About isFinite. +HB.about isFinite.Build. +Check isFinite. +HB.about IsFinite. diff --git a/coq/mathcomp/rel_fun.v b/coq/mathcomp/rel_fun.v new file mode 100644 index 0000000..4b2ebbf --- /dev/null +++ b/coq/mathcomp/rel_fun.v @@ -0,0 +1,52 @@ +From mathcomp Require Import all_ssreflect. +Set Bullet Behavior "Strict Subproofs". + + +Print rel. +(* +rel = fun T : Type => T -> pred T + : Type -> Type +*) +Print pred. +(* +pred = fun T : Type => T -> bool + : Type -> Type +*) + +Search rel set_of. + +Section Foo. + Context {T: finType} (a b: T). + Context (R: rel T) (X: {set T}). + + Definition funify := [set y | x in X, y in T & R x y]. + + Goal forall x y: T, + x \in X -> + y \in funify -> + R x y. + Proof. + move => x y. + rewrite /funify. + rewrite /=. + (* Search rel set_of. *) + Abort. + + Goal forall x y: T, + R x y -> + x \in X -> + y \in funify. + Proof. + rewrite /funify /= => x y. + Abort. + + + + Check R a b. + Check [set y in [set: T]]. + (* Check [finType of bool]. *) + Check equivalence_partition. + Check equivalence_partition R [set a]: {set {set T}}. + (* Search equivalence_partition. *) + Check [set b] \in equivalence_partition R [set a]. +End Foo. diff --git a/coq/ohe-sep-proof.v b/coq/ohe-sep-proof.v new file mode 100644 index 0000000..be4e53c --- /dev/null +++ b/coq/ohe-sep-proof.v @@ -0,0 +1,37 @@ +(* https://coq.zulipchat.com/#narrow/stream/237977-Coq-users/topic/Proving.20equality.20of.20a.20dependent.20type *) + +Require Import List. +Import ListNotations. + +(* Mark and Pad *) +Inductive mp: Type := Mark | Pad. + +(* Check count_occ. *) +(* Check eq_dec. *) +(* Locate "{ _ = _ } + { _ <> _ }". *) +(* Search bool "{_ = }". *) +(* Search (list _ -> _ -> nat). *) + + (* +countMark l = 1 +length l = n + *) +Fixpoint countMark (l: list mp): nat := + match l with + | nil => 0 + | Mark :: l' => S (countMark l') + | _ :: l' => countMark l' + end. + +(* Definition t (n: nat) (l: list mp) := *) +(* length l = n -> *) +(* countMark l = 1 -> *) +(* Type. *) +(* Check []: t 0. *) + +Definition t (n: nat) := forall (l: list mp), + length l = n -> + countMark l = 1 -> + Type. + +Check []: t 0. diff --git a/coq/one-hot.v b/coq/one-hot.v new file mode 100644 index 0000000..170bfe6 --- /dev/null +++ b/coq/one-hot.v @@ -0,0 +1,122 @@ +Require Import ssreflect. + +(* +Requirements: + - Exactly one mark + - Fixed size + - No zero size +*) + +Require Import Fin. +Print Fin.t. +(* +Inductive t : nat -> Set := +| F1 : forall n : nat, t (S n) +| FS : forall n : nat, t n -> t (S n). +*) + +Goal + Fin.t 0 -> False. +Proof. + intro H. + inversion H. +Qed. + +(* Indices: size and a flag indicating whether the mark has been made *) +Inductive t: nat -> bool -> Type := +| Mark: forall {n: nat}, + t n false -> t (S n) true +| Pad: forall {n:nat} {b: bool}, + t n b -> t (S n) b +| Nil: forall {n:nat} {b:bool}, + t (S n) b. + +Lemma t0False: forall (b: bool), + t 0 b -> False. +Proof. + move => b H. + inversion H. +Qed. + +Fixpoint markCount {n:nat} {b:bool} (a: t n b): nat := + match a with + | Mark a' => S (markCount a') + | Pad a' => markCount a' + | Nil => 1 + end. + +Goal forall (n:nat) (b: bool) (a: t n b), + markCount a = 1. +Proof. + move => n b a. + elim: n b a. + - move => b a. + have H := t0False _ a. + inversion H. + - elim. + + move => IHn b a. + + apply: t0False _ a. + by rewrite (t0False _ a). + + +(* Inductive t: nat -> bool -> Type := *) +(* | Mark: forall {n: nat}, *) +(* t n false -> t (S n) true *) +(* | Pad: forall {n:nat} {b: bool}, *) +(* t n b -> t (S n) b *) +(* | Zero: t 1 false *) +(* | One: t 1 true. *) + +Fixpoint markCount {n:nat} {b:bool} (a: t n b): nat := + match a with + | Mark a' => S (markCount a') + | Pad a' => markCount a' + | Zero => O + | One => 1 + end. + +Require Import Fin. +Print Fin.t. +Goal forall (b: bool), + t 0 b -> False. +Proof. + move => b a. + case a eqn:Hcase. +Restart. + case. + - elim. + + by []. + + by []. + + + + move => b a. + case b. +Restart. + move => b. + elim. + - by []. + - by []. + - +(* +b : bool + +========================= (1 / 1) + +False +*) + +Goal forall (n:nat) (b: bool) (a: t n b), + markCount a = 1. +Proof. + move => a n b. + elim: a n b. + - move => n a. + + +Check One. +Check Zero. +Check Mark Zero. +Check Pad (Mark Zero). +Check Pad (Mark Zero). +(* Notation "[ x ; .. ; y ]" := (cons x .. (cons y nil) ..). *) diff --git a/coq/re-thompson/re.v b/coq/re-thompson/re.v new file mode 100644 index 0000000..2bae91e --- /dev/null +++ b/coq/re-thompson/re.v @@ -0,0 +1,103 @@ +Require Import List. +Import ListNotations. + +Section Setify. + Context {A:Type}. + Variable (A_eqb: A -> A -> bool). + + (* x ∈ l *) + Definition elementOf (x: A) (l: list A): bool := + List.existsb (fun a => A_eqb x a) l. + + (* By the way, this function is a good example to illustrate + the difference between foldl and foldr... *) + Definition setify (l: list A): list A := + List.fold_left (fun acc x => + if elementOf x acc then acc + else (List.cons x acc) + ) l List.nil. + + + (* Not caring about efficiency here... *) + Definition union (a b: list A): list A := + let aset := setify a in + List.fold_left (fun acc y => + if elementOf y acc then acc + else (List.cons y acc) + ) b aset. +End Setify. + +Inductive re {A:Type}: Type := +| ε: re +| Char: A -> re +| Cat: re -> re -> re +| Alt: re -> re -> re +| Star: re -> re. +Arguments re: clear implicits. + +Module ReNotations. + Notation "'↑' a" := (Char a) (at level 10). + Notation "r '∗'" := (Star r) (at level 20). + Infix ";" := Cat (at level 60, right associativity). + Infix "│" := Cat (at level 65, right associativity). +End ReNotations. + +Inductive instr {A:Type}: Type := +| Atom: A -> instr +| Fork: instr -> instr -> instr +| Jump: instr -> instr +| Halt: instr. +Arguments instr: clear implicits. + +Section Foo. + Context {A:Type}. + Variable (A_eqb: A -> A -> bool). + + Fixpoint getStates_aux (r: re A): list A := + match r with + | Char a => [a] + | Alt r1 r2 | Cat r1 r2 => + (getStates_aux r1) ++ (getStates_aux r2) + | Star rr => getStates_aux rr + | ε => [] + end. + Definition getStates (r: re A): list A := + setify A_eqb (getStates_aux r). +End Foo. + + +(* +Fail Fixpoint compile {A:Type} (r: re A) + (k: list (instr A)): list (instr A) := + match r with + | Char a => (Chr a) :: k + | Cat r1 r2 => compile r1 (compile r2 k) + | Alt r1 r2 => [Fork (compile r1 k) (compile r2 k)] + | Star rr => + Fork k (compile rr (Star rr)) + | ε => [Halt] + end. + + +Fail Fixpoint compile {A:Type} (r k: re A): list (instr A) := + match r with + | Char a => (Chr a) :: (compile k ε) + | Cat r1 r2 => [Halt] + | Alt r1 r2 => [Halt] + | Star rr => [Halt] + | ε => [Halt] + end. +*) + +Import ReNotations. +Require Import String. +Open Scope string. + +Example r1 := (↑"a" ; ↑"b" ; ε). +Example r2 := (↑0 ; ↑1 ; ε). + +Unset Printing Notations. +Print r1. +Set Printing Notations. + +Compute getStates Nat.eqb r2. diff --git a/coq/strict-positive.v b/coq/strict-positive.v new file mode 100644 index 0000000..61b07cd --- /dev/null +++ b/coq/strict-positive.v @@ -0,0 +1,184 @@ +Inductive re {A:Type}: Type := +| Char: A -> re +| Cat: re -> re -> re +| Alt: re -> re -> re +| Star: re -> re. +Arguments re: clear implicits. + +Inductive t {A res k:Type}: Type := +| B (a:A) (kt kf:k) +| H (v:res) +| F (kt kf:k) +| L (def: k -> t) (body:t) +| R (def body: k -> t). +Arguments t: clear implicits. +Check B 0 (H true) (H false). + +Require Import Program. +Fixpoint compile {A k:Type} + (r: re A) (kt kf:k): t A bool k := + match r with + | Char a => B a kt kf + | Cat r1 r2 => + L (fun p2 => compile r1 p2 kf) (compile r2 kt kf) + | Alt r1 r2 => + L (fun p1 => + L (fun p2 => F p1 p2) + (compile r2 kt kf)) + (compile r1 kt kf) + | Star rr => + R (fun k => _) + (fun k => _) + end. + +Compute compile (Cat (Char 0) (Char 1)) (H true) (H false). + + + + + + + + + + + + + + + + +Require Import Program. +Fixpoint compile {A k:Type} + (r: re A) (kt kf:k): t A bool k := + match r with + | Char a => B a kt kf + | Cat r1 r2 => + let k2 := compile r2 kt kf in + compile r1 kt kf + | Alt r1 r2 => H true + | Star rr => H true + end. + +Compute compile (Cat (Char 0) (Char 1)) (H true) (H false). + + +Section Foo. + Context {A res A1 A2 res1 res2 k:Type}. + Axiom unnest: t A _ (t _ res _) -> t A res k. +End Foo. +Check unnest (B 0 (H true) (H false)). + + + + + + + + + + +(* +sk := B a + | Fork + | Jump + | Fix (* kt can be the loop body and kf the real kt *) +*) +Inductive re {A:Type}: Type := +| Char: A -> re +| Cat: re -> re -> re +| Alt: re -> re -> re +| Star: re -> re. +Arguments re: clear implicits. + +(* +Inductive sk {K:Type}: Type := +| B: forall {A:Type} (kt kf:K), A -> sk +| F: forall kt kf:K, sk +| J: forall kt kf:K, sk +| M: forall kt kf:K, sk +| H: bool -> sk. +Arguments sk: clear implicits. +*) + +Inductive sk: Type := +| B: forall {A:Type}, A -> sk -> sk -> sk +| F: sk -> sk -> sk +| J: sk -> sk +| M: sk -> sk -> sk +| H: bool -> sk. +Arguments sk: clear implicits. + +Check B. +Check M. +Check H true. +Check B 0 (H true) (H false). + + +Fixpoint compile {A:Type} (r:re A) (kt kf:sk): sk := + match r with + | Char a => B a kt kf + | Cat r1 r2 => + let k2 := compile r2 kt kf in + compile r1 k2 kf + | Alt r1 r2 => + F (compile r1 kt kf) (compile r2 kt kf) + | Star rr => + M (compile rr kt kf) + end. +Compute compile (Cat (Char 0) (Char 1)) (H true) (H false). +Compute compile (Alt (Char 0) (Char 1)) (H true) (H false). + + + + + + + + + + + + + + + + + +Inductive sk {A K:Type}: K -> K -> Type := +| B: forall kt kf:K, A -> sk kt kf +| F: forall kt kf:K, sk kt kf +| J: forall kt kf:K, sk kt kf +| M: forall kt kf:K, sk kt kf. +| H: forall kt kf:K, sk kt kf. +Arguments sk: clear implicits. + +Check B. + + + + + + + + + + + + +Inductive lbl {V:Type}: Type := +| Lbl: (V -> lbl -> lbl -> lbl) -> lbl. +Arguments lbl: clear implicits. + +Inductive t (V:Type): Type := +| Nil: t V +| Two: t V -> t V -> t V +| Con: (V -> t V) -> t V. +Arguments Nil {V}. +Arguments Two {V}. +Arguments Con {V}. + +Check Con (fun _:unit => Nil). +Check Con (V:=t unit) (fun x=> Two x Nil). +Check Con. +Check Con (fun x=>x). diff --git a/coq/third-party/hb-fintype.v b/coq/third-party/hb-fintype.v new file mode 100644 index 0000000..e678f37 --- /dev/null +++ b/coq/third-party/hb-fintype.v @@ -0,0 +1,55 @@ +From mathcomp Require Import all_ssreflect. +From HB Require Import structures. + +(* From mathcomp Require Import seq. *) +Require Import List. +Import ListNotations. + +Inductive foo: Type := +| Foo0 | Foo1 | Foo2. + + +Check pcan_type. +Check pcancel. +(* +(As in rT is a bigger type than aT) + +pcancel : forall rT aT : Type, (aT -> rT) -> (rT -> option aT) -> Prop +*) + +Module fooHB. + Definition enum_subdef: list foo := [Foo0; Foo1; Foo2]. +End fooHB. +HB.about Finite. +HB.about isFinite. +HB.about isFinite.Build. +HB.about IsEqType. +HB.about isEqType.Build. +(* +#+BEGIN_OUTPUT (Info) +HB: isFinite.Build is a factory constructor (from "./fintype.v", line 161) + +HB: isFinite.Build requires its subject to be already equipped with: + - hasDecEq + +HB: isFinite.Build provides the following mixins: + - isFinite + +HB: arguments: isFinite.Build T [enum_subdef] enumP_subdef + - T : Type + - enum_subdef : seq.seq T + - enumP_subdef : + Finite.axiom + (T:={| + Equality.sort := T; + Equality.class := + {| Equality.eqtype_hasDecEq_mixin := Finite.class T |} + |}) enum_subdef +#+END_OUTPUT (Info) *) +HB.about enumP_subdef. +Check enumP_subdef. +Check enum_subdef. (* [Foo0; Foo1] *) +Check enumP_subdef. (* [Foo0; Foo1] *) +Print Finite.axiom. +Print finite_axiom. +Fail HB.instance Definition foo_fin := isFinite.Build foo fooHB.enum_subdef _. diff --git a/coq/type-checker-atkey.v b/coq/type-checker-atkey.v new file mode 100644 index 0000000..9607dee --- /dev/null +++ b/coq/type-checker-atkey.v @@ -0,0 +1,33 @@ +Require Import List. +Import ListNotations. + +(* Inductive ref {A: Type}: A -> list A -> Type := *) +(* | Here: forall (a:A) (ls:list A), *) +(* ref a (a::ls) *) +(* | Further: forall {a: A} {ls: list A} (x: A), *) +(* ref a ls -> ref a (x::ls). *) + +Inductive type: Type := +| Nat | Bool +| Arrow: type -> type -> type. + +(* Inductive ctxt: list type -> Type := *) +(* | CNil: ctxt [] *) +(* | CCons: forall {ts: list type} (t: type), *) +(* ctxt ts -> ctxt (t::ts). *) + +Inductive term: Type := +(* de-Bruijn index *) +| Var: nat -> term +| App: term -> term -> term +| Abs: type -> term -> term. + +Definition ctxt: Type := list nat. + +Fixpoint typecheck (Γ: ctxt) (tm: term): option type := + match tm with + | Var n => _ + | App tm1 tm2 => _ + | Abs v tm' => _ + end. + diff --git a/coq/vec-last.v b/coq/vec-last.v new file mode 100644 index 0000000..3aea1de --- /dev/null +++ b/coq/vec-last.v @@ -0,0 +1,47 @@ +Require Import Vector. +Import VectorNotations. + +Print last. +Check last. + +Fixpoint lst' {A:Type} {n:nat} (v: Vector.t A (S n)): A := + match v in Vector.t _ (S n) return + match n with + | O => A + | S n' => A + end + with + | [] => idProp + | [x] => x + | _::x::v' => lst' (x::v') + end. + +Fixpoint lst' {A:Type} {n:nat} (v: Vector.t A (S n)) {struct n}: A. +refine ( + match v with + | [] => idProp + | [x] => x + | _::x::v' => _ + end). +exact (lst' _ _ (x::v')). +Qed. + +Check rectS. + +Program Fixpoint lst {A:Type} {n:nat} (v: Vector.t A n) + : match n with + | O => IDProp:Type + | S _ => A + end := + match v in Vector.t _ n return + match n with + | O => IDProp + | S _ => A + end with + | [] => idProp + | [x] => x + | _ :: vv => + lst _ + end. +Next Obligation. +Abort. diff --git a/haskell/cats/Orders.hs b/haskell/cats/Orders.hs new file mode 100644 index 0000000..61d481b --- /dev/null +++ b/haskell/cats/Orders.hs @@ -0,0 +1,44 @@ +-- https://bartoszmilewski.com/2014/12/05/categories-great-and-small/ + +{- +-- https://hackage.haskell.org/package/base-4.19.0.0/docs/Data-Semigroup.html +-- https://hackage.haskell.org/package/base-4.19.1.0/docs/Data-Monoid.html + +instance Semigroup Int where + -- An associative function + (<>) = (+) + +instance Monoid Int where + -- Neutral element. ie, identity + mempty = 0 +-} + +class MonoidTC a where + idty :: a + op :: a -> a -> a + +instance MonoidTC Int where + -- It's our job to ensure that these values indeed + -- does satisfy monoid rules. + idty = 0 + op = (+) + +instance MonoidTC String where + idty = "" + op = (++) + + +{- `Hask' category -} + +{- A monoid is a single-object category ?? -} + + + +-- Isomorphism between Either () a and Maybe a +e2m :: Either () a -> Maybe a +e2m (Left _) = Nothing +e2m (Right a) = Just a + +m2e :: Maybe a -> Either () a +m2e (Just a) = Right a +m2e Nothing = Left () diff --git a/haskell/clash/Dfa.hs b/haskell/clash/Dfa.hs new file mode 100644 index 0000000..3b082af --- /dev/null +++ b/haskell/clash/Dfa.hs @@ -0,0 +1,16 @@ +import Clash.Prelude + +data State a + = Inter (a -> Bool) + | Good + + +data Nfa a = Nfa { + states :: State a, + tf :: [State a -> [State a]] +} + +-- data Nfa a = Nfa { +-- -- states :: State a +-- tf :: [State a -> [State a]] +-- } diff --git a/haskell/megaparsec-eg/Re2.hs b/haskell/megaparsec-eg/Re2.hs new file mode 100644 index 0000000..da73d26 --- /dev/null +++ b/haskell/megaparsec-eg/Re2.hs @@ -0,0 +1,116 @@ +{-# LANGUAGE OverloadedStrings #-} + +import Text.Megaparsec +import Text.Megaparsec.Char +import qualified Text.Megaparsec.Char.Lexer as L +import Control.Monad.Combinators.Expr +import Data.Char +import Data.Void +import Data.Text + +type Parser = Parsec Void Text + +data Re a + = Atom a + | (Re a) :- (Re a) + | Rep (Re a) Integer (Maybe Integer) + | Eps + deriving Show + +infixr 6 :- + +uchar :: Parser Char +uchar = satisfy isUpper + +uchars :: Parser [Char] +uchars = many uchar + +atom :: Parser (Re Char) +atom = Atom <$> uchar + +cat :: Parser (Re Char -> Re Char -> Re Char) +cat = do + return $ \r1 r2 -> r1 :- r2 + +-- r{n,} +atleast :: Parser (Re Char -> Re Char) +atleast = do + _ <- char '{' + n <- L.decimal + _ <- char ',' + _ <- char '}' + return $ \r -> Rep r n Nothing + +-- r{,n} +atmost :: Parser (Re Char -> Re Char) +atmost = do + _ <- char '{' + _ <- char ',' + m <- L.decimal + _ <- char '}' + return $ \r -> Rep r 0 (Just m) + +-- r{n} +exactly :: Parser (Re Char -> Re Char) +exactly = do + _ <- char '{' + n <- L.decimal + _ <- char '}' + return $ \r -> Rep r n (Just n) + +-- r{n,m} +bounded :: Parser (Re Char -> Re Char) +bounded = do + _ <- char '{' + n <- L.decimal + _ <- char ',' + m <- L.decimal + _ <- char '}' + return $ \r -> Rep r n (Just m) + +rep :: Parser (Re Char -> Re Char) +rep = choice + [ bounded + , atleast + , atmost + , exactly + ] + + +optab :: [[Operator Parser (Re Char)]] +optab = + [ + [ + Postfix rep + -- Postfix rep + -- , Postfix atleast + -- , Postfix atmost + -- , Postfix exactly + ] + , + [ + InfixR ((:-) <$ cat) + ] + --, [ + -- Prefix (Rep <$ rep) + -- ] + ] + +re :: Parser (Re Char) +re = choice + [ atom + ] + +reparse :: Parser (Re Char) +reparse = makeExprParser re optab + +a :: IO () +a = parseTest (reparse <* eof) "ABCD" +-- Atom 'A' :- (Atom 'B' :- (Atom 'C' :- Atom 'D')) + +b :: IO () +b = parseTest (reparse <* eof) "A{2,3}BCD" +-- Rep (Atom 'A') 2 (Just 3) :- (Atom 'B' :- (Atom 'C' :- Atom 'D')) + +c :: IO () +c = parseTest (reparse <* eof) "A{2,}BCD" diff --git a/haskell/parsec-eg/CHANGELOG.md b/haskell/parsec-eg/CHANGELOG.md new file mode 100644 index 0000000..e5ef632 --- /dev/null +++ b/haskell/parsec-eg/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for parsec-eg + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/haskell/parsec-eg/LICENSE b/haskell/parsec-eg/LICENSE new file mode 100644 index 0000000..dba13ed --- /dev/null +++ b/haskell/parsec-eg/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/haskell/parsec-eg/app/Main.hs b/haskell/parsec-eg/app/Main.hs new file mode 100644 index 0000000..9d02f10 --- /dev/null +++ b/haskell/parsec-eg/app/Main.hs @@ -0,0 +1,28 @@ +-- module Main where + +import Control.Applicative +import Control.Monad +import Text.ParserCombinators.Parsec +import Text.ParserCombinators.Parsec.Expr + +data Re a + = Atom a + | Cat (Re a) (Re a) + deriving Show + + +-- optab :: [[Operator] +ops = + [ [ Postfix (Repeat (0, Nothing) <$ char '*') + , Postfix (Repeat (1, Nothing) <$ char '+') + , Postfix (Repeat (0, Just 1) <$ char '?') + ] + , + [ Infix (return sequence) AssocRight + ] + , + [ Infix (choice <$ char '|') AssocRight + ] + ] +-- main :: IO () +-- main = putStrLn "Hello, Haskell!" diff --git a/haskell/parsec-eg/dist-newstyle/cache/compiler b/haskell/parsec-eg/dist-newstyle/cache/compiler new file mode 100644 index 0000000000000000000000000000000000000000..258ea93f9dbd7fadca8ca42b5435b4683ad7d8fb GIT binary patch literal 20463 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 b!DRY^+58hNaocPH;i-}Mtug*ryea)ZPUROb literal 0 HcmV?d00001 diff --git a/haskell/parsec-eg/dist-newstyle/cache/config b/haskell/parsec-eg/dist-newstyle/cache/config new file mode 100644 index 0000000000000000000000000000000000000000..a86045a4da7effd7dfad17750c7b550b22722e8d GIT binary patch literal 5522 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 J|3clxzX5r1cmV(a literal 0 HcmV?d00001 diff --git a/haskell/parsec-eg/dist-newstyle/cache/elaborated-plan b/haskell/parsec-eg/dist-newstyle/cache/elaborated-plan new file mode 100644 index 0000000000000000000000000000000000000000..6e00e5119f795058cd2d0ef628a25676cbd602b6 GIT binary patch literal 84906 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 alQQS{ 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 V87`#6)fTW;?#jRA79ENFe*xsirNsaM literal 0 HcmV?d00001 diff --git a/haskell/parsec-eg/dist-newstyle/cache/plan.json b/haskell/parsec-eg/dist-newstyle/cache/plan.json new file mode 100644 index 0000000..203b1f5 --- /dev/null +++ b/haskell/parsec-eg/dist-newstyle/cache/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.2.1","cabal-lib-version":"3.10.2.1","compiler-id":"ghc-9.4.8","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.17.2.1"]},{"type":"pre-existing","id":"base-4.17.2.1","pkg-name":"base","pkg-version":"4.17.2.1","depends":["ghc-bignum-1.3","ghc-prim-0.9.1","rts"]},{"type":"pre-existing","id":"binary-0.8.9.1","pkg-name":"binary","pkg-version":"0.8.9.1","depends":["array-0.5.4.0","base-4.17.2.1","bytestring-0.11.5.3","containers-0.6.7"]},{"type":"pre-existing","id":"bytestring-0.11.5.3","pkg-name":"bytestring","pkg-version":"0.11.5.3","depends":["base-4.17.2.1","deepseq-1.4.8.0","ghc-prim-0.9.1","template-haskell-2.19.0.0"]},{"type":"pre-existing","id":"containers-0.6.7","pkg-name":"containers","pkg-version":"0.6.7","depends":["array-0.5.4.0","base-4.17.2.1","deepseq-1.4.8.0","template-haskell-2.19.0.0"]},{"type":"pre-existing","id":"deepseq-1.4.8.0","pkg-name":"deepseq","pkg-version":"1.4.8.0","depends":["array-0.5.4.0","base-4.17.2.1","ghc-prim-0.9.1"]},{"type":"pre-existing","id":"ghc-bignum-1.3","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.9.1"]},{"type":"pre-existing","id":"ghc-boot-th-9.4.8","pkg-name":"ghc-boot-th","pkg-version":"9.4.8","depends":["base-4.17.2.1"]},{"type":"pre-existing","id":"ghc-prim-0.9.1","pkg-name":"ghc-prim","pkg-version":"0.9.1","depends":["rts"]},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.17.2.1","transformers-0.5.6.2"]},{"type":"pre-existing","id":"parsec-3.1.16.1","pkg-name":"parsec","pkg-version":"3.1.16.1","depends":["base-4.17.2.1","bytestring-0.11.5.3","mtl-2.2.2","text-2.0.2"]},{"type":"configured","id":"parsec-eg-0.1.0.0-inplace-parsec-eg","pkg-name":"parsec-eg","pkg-version":"0.1.0.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/julinusername/gits/playground/haskell/parsec-eg/."},"dist-dir":"/home/julinusername/gits/playground/haskell/parsec-eg/dist-newstyle/build/x86_64-linux/ghc-9.4.8/parsec-eg-0.1.0.0/x/parsec-eg","build-info":"/home/julinusername/gits/playground/haskell/parsec-eg/dist-newstyle/build/x86_64-linux/ghc-9.4.8/parsec-eg-0.1.0.0/x/parsec-eg/build-info.json","depends":["base-4.17.2.1","parsec-3.1.16.1","parser-combinators-1.3.0-508bbdb5795b01e808a282e96babdf7bdb9259066465b3ad3a0334047c044a24","text-2.0.2"],"exe-depends":[],"component-name":"exe:parsec-eg","bin-file":"/home/julinusername/gits/playground/haskell/parsec-eg/dist-newstyle/build/x86_64-linux/ghc-9.4.8/parsec-eg-0.1.0.0/x/parsec-eg/build/parsec-eg/parsec-eg"},{"type":"configured","id":"parser-combinators-1.3.0-508bbdb5795b01e808a282e96babdf7bdb9259066465b3ad3a0334047c044a24","pkg-name":"parser-combinators","pkg-version":"1.3.0","flags":{"dev":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8659573e0d443d573f5b53f81b81dafbdc988d282b90c11e3da73562b4ea7876","pkg-src-sha256":"9310ef0d49f8a8922acda10b1cded9854cbee04dea717effc6ee5983072e4447","depends":["base-4.17.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.17.2.1","deepseq-1.4.8.0","ghc-prim-0.9.1"]},{"type":"pre-existing","id":"rts","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"pre-existing","id":"template-haskell-2.19.0.0","pkg-name":"template-haskell","pkg-version":"2.19.0.0","depends":["base-4.17.2.1","ghc-boot-th-9.4.8","ghc-prim-0.9.1","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-2.0.2","pkg-name":"text","pkg-version":"2.0.2","depends":["array-0.5.4.0","base-4.17.2.1","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.0","ghc-prim-0.9.1","template-haskell-2.19.0.0"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.17.2.1"]}]} \ No newline at end of file diff --git a/haskell/parsec-eg/dist-newstyle/cache/solver-plan b/haskell/parsec-eg/dist-newstyle/cache/solver-plan new file mode 100644 index 0000000000000000000000000000000000000000..0114f330ed48e72b3cb245d1532f622a67271c51 GIT binary patch literal 76025 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 F`3nWb*dG7@ literal 0 HcmV?d00001 diff --git a/haskell/parsec-eg/dist-newstyle/cache/up-to-date b/haskell/parsec-eg/dist-newstyle/cache/up-to-date new file mode 100644 index 0000000000000000000000000000000000000000..b47adaf751628dfc2ef191883a7eeb1e12866e67 GIT binary patch literal 507 zcmYL_&2GaW5QHQ3)Jjd$pG(g@g8&1zAEigIH;L64yRem-x9{R$mka0{c6N4myXCyx zuHB=H(OsF~hHEZX=v@M)xvaV3vcSC`f{XcU!`qF%`YS@hID``^Qj$+q3J%>A&_P zwOX6aE+*($#U+<^i~UhBEUCHRf(>E5xDME+6o=0RMAl7X-T+QC4&|c?BO32}Z|c@~ zA)yhCQ;mYwdguFNO;W2&E3DPl_{#N_6IG>!t~;T%Q+l0bj(~V2(`;)Cy^EO2^BrNN mYzXY^(idFvgtE<{%ZCSqUnD5DvEMMdkd9LvZ`(JtfAt6CWo>x? literal 0 HcmV?d00001 diff --git a/haskell/parsec-eg/dist-newstyle/packagedb/ghc-9.4.8/package.cache b/haskell/parsec-eg/dist-newstyle/packagedb/ghc-9.4.8/package.cache new file mode 100644 index 0000000000000000000000000000000000000000..b3cae5cf028ad4728b344193a7c6fe4e76e36af3 GIT binary patch literal 40 ZcmZQb&qyxFPG=4.17.2.1, + text, + parser-combinators ^>=1.3.0, + parsec + + -- Directories containing source files. + hs-source-dirs: app + + -- Base language which the package is written in. + default-language: Haskell2010 diff --git a/haskell/re-cps-trial.hs b/haskell/re-cps-trial.hs new file mode 100644 index 0000000..2bc6d1d --- /dev/null +++ b/haskell/re-cps-trial.hs @@ -0,0 +1,2 @@ +data Cont i a b + = Branch i [Cont i a Bool] [Cont i a Bool] diff --git a/haskell/re-trial.hs b/haskell/re-trial.hs new file mode 100644 index 0000000..a7a5bb2 --- /dev/null +++ b/haskell/re-trial.hs @@ -0,0 +1,66 @@ +-- Using a non-haskell style + +data Result = + Ok String String + | Err + deriving Show + +type Parser = String -> Result + +eof :: Parser +eof "" = Ok "" "" +eof _ = Err + +once :: Char -> Parser +once c [] = Err +once c (x:xs) = + if x==c then Ok [c] xs + else Err + +alt :: Parser -> Parser -> Parser +alt fa fb inp = + case (fa inp) of + Ok a rem -> Ok a rem + Err -> + case (fb inp) of + Ok b rem -> Ok b rem + Err -> Err + +-- Higher precedence number, higher the precedence +infixl 1 <|> +(<|>) = alt + +cat :: Parser -> Parser -> Parser +cat fa fb inp = + case (fa inp) of + Ok a rem -> fb rem + Err -> Err + +infixl 2 <.> +(<.>) = cat + +-- choice :: [Parser] -> Parser +-- choice ps inp = foldl (\acc x -> alt acc x inp) ps eof + +-- many +star :: Parser -> Parser +star fa inp = + case (fa inp) of + Ok a xs -> star fa xs + Err -> Ok "" inp + +-- some +plus :: Parser -> Parser +plus fa inp = + case (fa inp) of + Ok a xs -> star fa xs + Err -> Err + +dot :: Parser +dot "" = Err +dot (x:xs) = Ok [x] xs + + +-- a | (cb) +aO_cb = (once 'a' <|> once 'c' <.> once 'b') +aOc_b = ((once 'a' <|> once 'c') <.> once 'b') diff --git a/latex/tikz/dfa.tex b/latex/tikz/dfa.tex new file mode 100644 index 0000000..617ad89 --- /dev/null +++ b/latex/tikz/dfa.tex @@ -0,0 +1,74 @@ +% https://www3.nd.edu/~dchiang/teaching/theory/2018/www/tikz_tutorial.pdf + +\documentclass{article} % What kind of document this is +\usepackage{tikz} % Import the tikz package +\usetikzlibrary{automata} % Import library for drawing automata +\usetikzlibrary{positioning} % ...positioning nodes +\usetikzlibrary{arrows} % ...customizing arrows +\tikzset{ + node distance=2.5cm, % Minimum distance between two nodes. Change if necessary. + every state/.style={ % Sets the properties for each state + semithick, + fill=gray!10}, + initial text={}, % No label on start arrow + double distance=2pt, % Adjust appearance of accept states + every edge/.style={ % Sets the properties for each transition + draw, + ->,>=stealth', % Makes edges directed with bold arrowheads + auto, + semithick}} +%\let\epsilon\varepsilon + +\begin{document} + +% a ; b +\begin{figure} +\begin{tikzpicture} + \node[state, initial] (f1) {false}; + \node[state, right of=f1] (t1) {true}; + \node[state, right of=t1] (f2) {false}; + \node[state, accepting, right of=f2] (t2) {true}; + + \draw (f1) edge node {\tt a} (t1); + \draw (t1) edge[bend left, above] node {\tt $\varepsilon$} (f2); + %\draw (t1.east) edge[bend left] node {\tt $\varepsilon$} (f2.west); + \draw (f2) edge node {\tt b} (t2); +\end{tikzpicture} +\caption{$a;b$} +\end{figure} + +% % a | b +% \begin{figure} +% \begin{tikzpicture} +% \node[state, initial] (f1) {false}; +% \node[state, accepting, right of=f1] (t1) {true}; +% \draw (f1) edge node {\tt a} (t1); +% +% \node[state, initial, below of=f1] (f2) {false}; +% \node[state, accepting, right of=f2] (t2) {true}; +% \draw (f2) edge node {\tt b} (t2); +% \end{tikzpicture} +% \caption{$a|b$} +% \end{figure} +% +% \vspace{3cm} +% +% % a* +% \begin{figure} +% \begin{tikzpicture} +% \node[state, accepting, initial] (None) {None}; +% \node[state, right of=None] (false) {false}; +% \node[state, right of=false] (true) {true}; +% % \draw (None) edge[loop above] node {\tt 0} (None); +% \draw (None) edge node {\tt $\varepsilon$} (false); +% +% % \draw (false) edge[loop above] node {\tt 1} (false); +% % \draw (false) edge[bend left] node {\tt 0} (true); +% % \draw (true) edge[bend left] node {{\tt 0}, {\tt 1}} (false); +% \draw (false) edge node {\tt a} (true); +% \draw (true) edge[bend left] node {$\varepsilon$} (None); +% \end{tikzpicture} +% \caption{$a*$} +% \end{figure} + +\end{document}