Skip to content

Instantly share code, notes, and snippets.

View glimonta's full-sized avatar
🍦

Gabriela Limonta glimonta

🍦
View GitHub Profile
@glimonta
glimonta / tautologiaI.hs
Created December 4, 2013 14:37
Modela la representación de expresiones booleanas y posee una función que dice si una expresión es una tautología o no. Esta es la visión como un algebra del problema, utiliza recursión.
{-# LANGUAGE UnicodeSyntax #-}
{-# LANGUAGE DeriveDataTypeable #-}
import Control.Applicative (pure)
import Data.Data (Data)
import Data.Data.Lens (template)
import Data.Functor ((<$>))
import Data.List (nub, subsequences)
import Data.List.Unicode ((∈))
import Data.Typeable (Typeable)
@glimonta
glimonta / tautologia.hs
Last active December 30, 2015 06:19
Modela la representación de expresiones booleanas y posee una función que dice si una expresión es una tautología o no. Esta es la visión como un coalgebra del problema, no utiliza recursión. Tiene la ventaja sobre la visión como un algebra de permitir extender el código sin modificar el original, de este modo se pueden agregar extensiones.
{-# LANGUAGE UnicodeSyntax #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE Rank2Types #-}
import Data.List (nub, subsequences)
import Data.List.Unicode ((∈))
import Data.Functor ((<$>))
infixr 3 ∧
infixr 2 ∨
@glimonta
glimonta / eval.thy
Last active August 29, 2015 14:16
Eval function with new do-notation
fun eval :: "exp ⇒ state ⇒ (val × state) option"
and eval_l :: "lexp ⇒ state ⇒ (val × state) option" where
"eval (Const c) s = Some (c, s)"
| "eval Null s = Some (NullVal, s)"
| "eval (V x) (σ, μ) = Some (σ x, (σ, μ))"
| "eval (Plus i⇩1 i⇩2) s = do {
(v⇩1, s) ← eval i⇩1 s;
(v⇩2, s) ← eval i⇩2 s;
v ← plus_val v⇩1 v⇩2;
Some (v, s)
@glimonta
glimonta / eval.thy
Created March 10, 2015 11:38
What I think eval and eval_l should look like
lemma "eval (Ref e) s = do {
(v, s) ← eval_l e s;
(case v of (A _) ⇒ Some (v, s) | _ ⇒ None)
}"
lemma "eval_l (Derefl e) s = do {
(v, s) ← eval e s;
(case v of (A _) ⇒ Some (v, s) | _ ⇒ None)
}"

Keybase proof

I hereby claim:

  • I am glimonta on github.
  • I am glimonta (https://keybase.io/glimonta) on keybase.
  • I have a public key ASC2_ZU6tk7bag_kDpAEnHKLmPdT8g23KWgGsrlueV3Wmgo

To claim this, I am signing this object: