Comments (2)
Sorry for the delay. That shouldn't be a type error because Eq<Nat>(Nat{zero})(Nat{succ(Nat{zero})})
is just the type that asserts 0 == 1
. Or, in other words, it is just, literally, the "zero is one!" assertion written in the language of types. It doesn't prove anything by itself. To prove that assertion, what you need is a separate term of that type. That is, when you run formality -b sntc your_file.formality.hs
, this is what you see:
[TERM]
Eq<Nat>(n0)(n1)
[TYPE]
Type
[EVAL]
Eq<Nat>(Nat{zero})(Nat{succ(Nat{zero})})
This is what you want instead:
[TERM]
X
[TYPE]
Eq<Nat>(Nat{zero})(Nat{succ(Nat{zero})})
[EVAL]
X
The first just says "Eq<Nat>(n0)(n1)
describes the theorem 1 == 0
", the second says "X
proves the theorem 1 == 0
". If you find a term X
which has the type Eq<Nat>(Nat{zero})(Nat{succ(Nat{zero})})
, then, and only then, you have proven that one is the same as zero, which should obviously be impossible in Formality.
Note: you can actually do this right now since Formality doesn't include certain consistency checks yet (universe polymorphism, guarded recursion). I'm working in simplifying Formality's implementation (it is down to 500 LOC, from almost 3k LOC!), here. Once that is done I'll include those checks and reason about its consistency (which should follow from Coq's consistency).
from kind.
I'm so sorry for the delay getting back to you.
Thanks so much for taking time to explain it all! That makes a lot more sense now, within the context of what I was trying to do.
Cool! That's exciting - I'll definitely take a good look :)
from kind.
Related Issues (20)
- Bump cli version to 0.3.8
- Bump cli version to 0.3.9
- "New Type" Optimization
- Improve error messages by removing things like implicit arguments
- Add type checker for erased Pi, App and Lam
- Remove old parser and stuff to use treesitter
- Add new type of error messages used for LLMs.
- error[E0599]: no method named `as_ptr` found for struct `AtomicU64` in the current scope HOT 2
- Add an API for cursor on trees
- Add slash on the end of identifiers as another type of "use"
- Add flag to remove dependency errors
- New panic hook for the language.
- Add flag to show immediate dependencies
- Inconsistency in type check messages
- Update basic function names for Kindex update HOT 1
- Create a project/package manager
- Refactor file loading and name resolution module
- Compiler crashes when using an undeclared alias
- Inconsistent arity error
- WebAssembly
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kind.