Skip to content

Instantly share code, notes, and snippets.

View Trebor-Huang's full-sized avatar

Trebor Huang Trebor-Huang

View GitHub Profile
@Trebor-Huang
Trebor-Huang / SSet.py
Created January 7, 2024 16:47
Effective simplicial set (draft)
from abc import ABC, abstractmethod
from dataclasses import dataclass
from functools import cached_property
@dataclass(frozen=True)
class SimplexMap:
"""A sSet map symbol, mathematically defined as a
monotone map of ordered finite sets. Represented as a
tuple of natural numbers, where `l[i]` represents the
number of elements mapped to `i`."""
@Trebor-Huang
Trebor-Huang / Quotient.agda
Last active October 10, 2023 16:03
Quotient types in MLTT imply excluded middle
open import Agda.Builtin.Equality
-- Some familiar results about equality
UIP : {A : Set} (x y : A) (p q : x ≡ y) → p ≡ q
UIP x y refl refl = refl
coerce : {A : Set} (B : A → Set)
→ {x y : A} → x ≡ y
→ B x → B y
@Trebor-Huang
Trebor-Huang / natmod.agda
Created July 18, 2023 18:22
Free natural model as an HIIT
{-# OPTIONS --cubical #-}
module natmod where
open import Cubical.Foundations.Prelude
data Ctx : Type
data _⊢_ : Ctx → Ctx → Type
data Ty : Ctx → Type
data Tm : Ctx → Type
-- This is halfway between EAT and GAT.
-- GAT is hard! Why is EAT so easy?
@Trebor-Huang
Trebor-Huang / HitPuzzle.agda
Created July 8, 2023 03:44
An inductive family puzzle
{-# OPTIONS --cubical #-}
module HitPuzzle where
open import Cubical.Foundations.Everything
open import Cubical.Data.Empty
open import Cubical.Data.Sum
open import Cubical.Data.Sigma
open import Cubical.Data.Maybe
open import Cubical.Data.Nat
data Perm : Type → Type₁ where
@Trebor-Huang
Trebor-Huang / Polynomial.agda
Created January 16, 2023 09:56
An explanation of polynomial functors
{-# OPTIONS --postfix-projections #-}
open import Agda.Primitive
open import Data.Product
module Polynomial where
variable
X I O : Set
record Poly : Set₁ where
-- A polynomial is an expression
@Trebor-Huang
Trebor-Huang / Pprop.lean
Last active December 11, 2022 05:51
Classical affine logic for intuitionists.
structure Pprop : Type where
pos : Prop
neg : Prop
syn : pos → neg → False := by intros; assumption
namespace Pprop
instance : CoeSort Pprop Prop := ⟨Pprop.pos⟩
instance : Coe Bool Pprop where
coe
| true => {pos := True, neg := False}
@Trebor-Huang
Trebor-Huang / lccc.agda
Created November 26, 2022 06:33
Free Locally Cartesian Closed Categories
{-# OPTIONS --cubical -Wignore #-}
module lccc where
open import Cubical.Foundations.Prelude
data Obj : Type
data Hom : Obj → Obj → Type
variable
A B C D X Y : Obj
f g h u v e : Hom A B
@Trebor-Huang
Trebor-Huang / derivative.py
Created November 6, 2022 15:31
Parsing with derivatives
from functools import lru_cache
class Map:
def __init__(self, f, iterable):
self.data = (f, iterable)
def __iter__(self):
for i in self.data[1]:
yield self.data[0](i)
@Trebor-Huang
Trebor-Huang / GeneralRecursive.agda
Last active September 24, 2022 14:48
General Recursive Functions in Agda
module _ where
open import Data.Nat using (ℕ; suc; _+_)
open import Data.Fin using (Fin) renaming (zero to 𝕫; suc to 𝕤_)
open import Data.Vec using (Vec; []; [_]; _∷_; tail; map; allFin) renaming (lookup to _!_)
open import Data.Vec.Relation.Binary.Pointwise.Inductive using (Pointwise; []; _∷_)
open import Data.Vec.Relation.Binary.Equality.Propositional using (_≋_; ≋⇒≡)
open import Relation.Binary.PropositionalEquality using (_≡_; refl; cong)
variable
n m n' : ℕ
@Trebor-Huang
Trebor-Huang / freeCCC.agda
Last active September 8, 2022 05:10
Defines STLC as the free CCC over the base type in Agda directly with HITs. Proves canonicity directly by induction.
{-# OPTIONS --cubical --no-import-sorts --postfix-projections -W ignore #-}
module freeCCC where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.HLevels
open import Cubical.Foundations.Function
open import Cubical.Foundations.Isomorphism
open import Cubical.Data.Unit using (Unit; isPropUnit; isSetUnit)
open import Cubical.Data.Bool using (Bool; true; false; if_then_else_; isSetBool)
open import Cubical.Data.Sum using (_⊎_; inr; inl)
open import Cubical.Data.Sigma using (Σ; _×_; ΣPathP)