Money-laundering, scamming, cyber slavery compounds and appalling human rights abuses are no obstacles for Premier League clubs looking for betting partners – or the UK regulator. Innlegget Plus ça change dukket først opp på josimarfootball.com.| josimarfootball.com
Senador diz que cenário já seria de ditadura do judiciário e defende anistia como 'saída honrosa' a todos, inclusive para Moraes| Folha de S.Paulo
Eu segui o dinheiro do partido de Bolsonaro. Fui parar em Mogi das Cruzes e descobri contratos com uma produtora audiovisual. O post Dinheiro de produtora contratada pelo PL vai parar em reduto eleitoral de Valdemar da Costa Neto apareceu primeiro em Intercept Brasil.| Intercept Brasil
Investigação mostra clara articulação golpista no final de 2022, mas alguns pontos seguem com frágil comprovação| Folha de S.Paulo
Fiz os cursos da Destra, a empresa de cursos do Nikolas Ferreira que tem um objetivo claro: levar cristãos aos braços da extrema direita.| Intercept Brasil
This was my first time attending EGRAPHS. Isn't that kind of crazy?| pavpanchekha.com
I've been thinking about quantifier elimination, and one thing I have gained a new appreciation for is how much of our ordinary mathematical syntax can be thought of as the "consequence" of quantifier elimination. This page lists a few examples. Modular arithmetic The mod operation, as in x % 3, is necessary to eliminate existentials like: ∃ x, y = 3 x + 2 Here the quantifier elimination results in y % 3 = 2. Set operations The theory of sets has just one primitive relation, x ∈ S. But if...| Pavel Panchekha’s Blog
This post is the third in a series of me trying to work out batches, a new data structure I am testing for Herbie and more generally for programming with recursive data structures. In my first post I laid out a type theory for batches, and in my second post I discussed how we can check that programs that use batches are safe. But I'm still after a "holy grail": how to making programming with batches "normal". Specifically, most programming with batches involves lots of indices, which need to ...| Pavel Panchekha’s Blog
Doing normal programming with batches has a common pattern. For| pavpanchekha.com
I was recently talking to Hans Boehm about floating point rounding modes. They are a mess, aren't they? It's a piece of global application state that very subtly changes the meaning of every floating-point operation in the whole program. It causes bugs in compilers, confusion for programmers, and all sorts of pain for library developers. So what would be better? Can we get rid of rounding modes? Well, for one, we could just get rid of rounding modes entirely. I don't mean remove them from the...| Pavel Panchekha’s Blog
As I am teaching Software Verification, I am leaning on an analogy that symbolic execution corresponds to expressions in a given programming language while Hoare logic corresponds to statements. It's vague but to the extent that your language has "pure" and "imperative" bits to it, symbolic execution and Hoare logic are frameworks for reasoning about them. But I've long felt that the theory beyond that level is poorly settled. The way I see it, most programs have structure at roughly four lev...| Pavel Panchekha’s Blog
Shell scripts are bug prone, unmaintainable, and inscrutible. But what in particular makes them bad? This is a good question without answers. I have four independent theories.1 [1 Naturally all probably contribute, but assigning blame, or resolving different kinds of errors to different causes, would be valuable. "All of the above" is usually true but without more details also usually useless.] Shell is a bad programming language Data structures beyond text are necessary Processes are a baroq...| Pavel Panchekha’s Blog
I met with a student recently who was a little confused by the relationship between first-order logic, ZFC, dependent types, Martin-Löf, and so on. Recalling S. Aaronson, I explained it by analogy to computers. Proof systems, like first-order logic1 [1 Here I'll be specifically refering to classical first-order logic with equality.] or dependent types, are like the operating system for your computer. By themselves, they do not do much; their main goal is to run particular programs. These pro...| Pavel Panchekha’s Blog
About a year ago, I did a little survey of PL blogs from the first half of 2018: who blogs (199 people), how much (3.8 posts every half-year, on average), and what about (mostly technical, PL-related content). I even gave a breakdown of the 199 non-technical blog posts by topic. In that post I promised to do a closer look at the technical, PL-related blog posts, since they were by far the biggest category, and worth breaking down further. Well, here we are, a year later… Turns out reading a...| Pavel Panchekha’s Blog
Haoyi Li recently wrote an excellent blog post on the Visitor pattern, specifically on how Visitors make fusion and streaming really easy. I loved the example of JSON parsing and processing. It is an excellent example of a fundamental duality in PL theory: intrinsic and extrinsic data. Constructing extrinsic data Intrinsic data is what we normally think of as data, a number, say, or an array. Extrinsic data is data described by its functionality. For example, instead of five being then number...| Pavel Panchekha’s Blog
Applications often implement one of a small number of architecture. These core architectures are like "design patterns", except they are patterns in dataflow and computation structure, not in class design and structure. I've documented some patterns documented below, along with links for common problems those architectures face. Event loop Many applications have a "main loop", which processes events and fires off callbacks as a result of these events. For example, the read-eval-print loop in ...| Pavel Panchekha’s Blog
My work on formally specifying web page layouts often has people asking how web page layouts—which after all are esthetic as much as they are functional—could possibly follow a specification in pure logic. I understand the confusion: we too often think of a program as having an end-to-end specification, and that the point of verification is to allow us to treat the program as a black box, secure in the understanding that it follows the spec. That is an unusual special case. Most programs ...| Pavel Panchekha’s Blog
New academic languages are near-universally variations on a theme: first-class closures, mostly functional, with inductive data types and an algebraic type system. So has programming language design as a field ended? I think yes, but there's a chance to apply the same approaches and techniques to the design of standard libraries. In this post, I demonstrate that comparing even the most basic libraries across languages demonstrates many degrees of freedom for a designer to weigh. All serious p...| Pavel Panchekha’s Blog
Functional reactive programming is a niche but interesting way of writing stateful programs, especially games and user interfaces. The basic idea is to implement the user interface as a purely functional program from the history of user inputs to a UI. That UI is recomputed every time user input occurs, automatically using caching to make things efficient. Modern formulations1 [1 I like the FRP Refactored paper at Haskell'16.] generally use some sort of type-theory machinery to ensure that yo...| Pavel Panchekha’s Blog
Herbie is a tool for automatically transforming floating-point formulas to be more accurate, and it's pretty good at this job. And one of Herbie's best features is that it does not require any user input; numerical methods expertise is rare. But while fully automated operation is convenient, it doesn't help the user understand what Herbie is doing, and while Herbie is great at finding clever transformations, it's not very good at making its output simple, digestible, and clear. With these iss...| Pavel Panchekha’s Blog
One trend I'm seeing in PL research is “programs as patchwork”, where different aspects of one program are written in different DSLs. Halide The best example of this kind of work is Halide, a language for writing fast matrix operations (for graphical filters). Halide is originally a product of academia but is now widely used in industry. For example, a 3×3 blur in Halide would be described by first defining the computation: blur_x(x, y) = (input(x-1, y) + input(x, y) + input(x+1, y))/3; ...| Pavel Panchekha’s Blog
A conversation a month ago with James reminded me of two blog posts I'd written a while ago: on interpreting first-order logic as a modal logic and on equality of functions in ITT. Combining the two posts, I've started wondering whether it's possible to define a type system that lets you prove facts about open terms. Why open terms In that second post, I pointed out that ITT allows you to prove ∀n, n + 0 = 0 + n, but does not allow you to use this fact to prove (n ⇒ n + 0) = (n ⇒ 0 + n)...| Pavel Panchekha’s Blog
In a recent conversation, James enlightened me about the connection between functions and relations in first order logic. In this short post I'd like to share the insight. Functions, of course, are a certain kind of relation—a total, functional relation. In set theory we directly define functions that way, and in any first order logic we think of a function f(x) and the relation f(x) = y as representing the same thing. Yet there is a definite difference between the two: syntactically, they ...| Pavel Panchekha’s Blog
Often when I switch between Racket, my home language, and Coq, a research interest, I am struck by a minor but meaningful difference: Racket allows functions that vary in how many arguments they take, and Coq does not. It's minor, but it means that, for example, I cannot use this idiom: (map + '(1 2 3) '(4 5 6) '(7 8 9)) ⇝ '(12 15 18) This works because in Racket, + takes any number of arguments and adds them all, and map takes any number of lists as arguments (it picks one element from eac...| Pavel Panchekha’s Blog
When I started studying dependent types a few years ago, one question I never got a good answer to was: why is equality such a big deal? Equality types are, of course, practically important. They're practically important because we want to prove stuff equal to other stuff a lot! But why does adding equality types necessitate so much deep theory about how a dependent type system works?1 [1 After all, integers, also a complicated concept, can be added cleanly and independently, even though indu...| Pavel Panchekha’s Blog
I've been working on a little side-project called Fine to explore some of the foundations of type theory. I haven't had much time recently to pursue it, so I'm writing up the work I've already done. A preliminary implementation is on GitHub, or you can look at the rudimentary language tutorial using RawGit. Function intensionality The main goal of Fine is to explore what a world without function extensionality would be like. I've written before that basic type theories usually leave open the ...| Pavel Panchekha’s Blog