Functional Programming & Proofs
Trees and languages
- (parametric types)
How to generalize boolean expressions into any kind of expressions with, for instance, float expressions used in fuzzy logic ?
type 't Exp = EVal of 't | ENot of ('t Exp) | EAnd of ('t Exp)*('t Exp);;
let e1 = EAnd (EVal True,ENot (EVal False));;
let e2 = EAnd (EVal 1.0,ENot (EVal 0.0));;
let e3 = EAnd (EVal (set [1;2;3]),ENot (EVal (set [3;4])));;
let rec eval fval fnot fand e = // fold/reduce
match e with
| EVal v -> fval v
| ENot be1 -> fnot (eval fval fnot fand be1)
| EAnd (be1,be2) -> fand (eval fval fnot fand be1) (eval fval fnot fand be2);;
eval id Not And e1;;
eval id ((-) 1.0) min e2;;
eval id (Set.difference (set [1..5])) Set.intersect e3;;
5 - 10
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide
docteur dr laurent thiry uha mulhouse france functional programming fsharp proof theory coq coqide